在python中递归打印钻石

时间:2012-07-25 03:10:20

标签: 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 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()

2 个答案:

答案 0 :(得分:1)

因为这必须是作业,我不会给你代码,但解释如何用文字来做:

不是循环,而是创建一个调用自身的函数,并将所需的变量作为参数传递。然后你在函数中使用“if”进行测试,当为true时,停止循环而改为返回。那就是你将“退出”循环。

因此,在这种情况下,您会传递ai作为参数,在函数中使用一个增加i,并在i大于{{1时只是a

答案 1 :(得分:0)

试试这个

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)