在python中递归打印菱形

在python中递归打印菱形,python,printing,recursion,python-3.x,Python,Printing,Recursion,Python 3.x,有人能帮我一下吗,我被困在将代码转换为递归函数的基本情况中。。。显然不能在递归函数中使用循环 def diamond(a): assert a > 0, "width must be greater than zero" for i in range(0, a, 2): for c in range(0, a - i, 2): print(" ", end='') if a % 2 == 0: i += 1 for m i

有人能帮我一下吗,我被困在将代码转换为递归函数的基本情况中。。。显然不能在递归函数中使用循环

def diamond(a):

assert a > 0, "width must be greater than zero"


for i in range(0, a, 2):

    for c in range(0, a - i, 2):
        print(" ", end='')

    if a % 2 == 0:
        i += 1

    for m in range(0, i - 1):
        print("*", end='')

    print()


for i in range (0, a, 2):

    for c in range(0, i, 2):
        print(" ", end='')

    for m in range(0, a - i):
        print("*", end='')

    print()

因为这必须是家庭作业,所以我不会给你代码,而是用文字解释如何做:

您不需要循环,而是创建一个调用自身的函数,并将所需的变量作为参数传递。然后在函数中有一个带有“if”的测试,如果为true,则停止循环并返回。那就是你会“掉”出循环


因此,在这种情况下,您可以传入
a
i
作为参数,在函数中增加
i
,当
i
大于
a
时,只需
返回

因为这必须是家庭作业,我不会给您代码,而是用文字说明如何操作:

您不需要循环,而是创建一个调用自身的函数,并将所需的变量作为参数传递。然后在函数中有一个带有“if”的测试,如果为true,则停止循环并返回。那就是你会“掉”出循环

因此,在这种情况下,您可以传入
a
i
作为参数,在函数中增加
i
,当
i
大于
a
时,只需
返回

试试这个

def triangles(n):
     if not n & 1:
         raise ValueError('n must be odd')
    print_diamond(0, n, n >> 1)

def print_diamond(start, stop, midpoint):
    if start < stop:
        if start <= midpoint:
            print('  ' * (midpoint - start) + '* ' * ((start << 1) + 1))
        else:
            print('  ' * (start - midpoint) + '* ' * ((stop - start << 1) - 1))
        print_diamond(start + 1, stop, midpoint)

triangles(5)
def三角形(n):
如果不是n&1:
raise VALUERROR('n必须为奇数')
打印菱形(0,n,n>>1)
def打印_菱形(开始、停止、中点):
如果开始<停止:
如果开始试试这个

def triangles(n):
     if not n & 1:
         raise ValueError('n must be odd')
    print_diamond(0, n, n >> 1)

def print_diamond(start, stop, midpoint):
    if start < stop:
        if start <= midpoint:
            print('  ' * (midpoint - start) + '* ' * ((start << 1) + 1))
        else:
            print('  ' * (start - midpoint) + '* ' * ((stop - start << 1) - 1))
        print_diamond(start + 1, stop, midpoint)

triangles(5)
def三角形(n):
如果不是n&1:
raise VALUERROR('n必须为奇数')
打印菱形(0,n,n>>1)
def打印_菱形(开始、停止、中点):
如果开始<停止:

如果开始计算基本情况是递归的一半。到目前为止你有什么?你的代码格式错误。另外,不要在循环开始后留下空格。找出基本情况是递归的一半。到目前为止你有什么?你的代码格式错误。另外,循环开始后不要留下任何空间。Lennart,我们不允许更改该函数所使用的参数量。@user1550365然后创建另一个函数。非常确定,只有原始宽度作为第一个参数无法做到这一点,我认为您需要使用默认的可选第二个参数parameter@user1550365:马辛说的。请记住,在Python中,您也可以在函数中创建函数。但是我会创建一个默认的可选第二个参数
I=0
(或者
level=0
可能是一个更好的名称),虽然这会添加一个参数,但您仍然可以仅使用一个参数调用它。Lennart,我们不允许更改该函数所使用的参数量。@user1550365然后创建另一个函数。非常确定,只有原始宽度作为第一个参数无法做到这一点,我认为您需要使用默认的可选第二个参数parameter@user1550365:马辛说的。请记住,在Python中,您也可以在函数中创建函数。但是我会创建一个默认的可选第二个参数
I=0
(或者
level=0
可能是一个更好的名称),虽然这会添加一个参数,但您仍然可以仅使用一个参数调用它。