【问题标题】:Recursively print diamond in python在python中递归打印钻石
【发布时间】:2012-07-23 10:29:33
【问题描述】:

任何人都可以在这里帮助我,我被困在将此代码转换为递归函数的基本案例中......显然不能在递归函数中使用循环。

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()

【问题讨论】:

  • 找出基本情况是递归的一半。到目前为止你有什么?
  • 您的代码格式错误。另外,循环开始后不要留空格。

标签: python printing recursion python-3.x


【解决方案1】:

因为这一定是功课,所以我就不给你代码了,而是用文字解释一下怎么做:

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

所以在这种情况下,您将传入ai 作为参数,在函数中将i 加一,当i 大于a 时,只需return

【讨论】:

  • Lennart,我们不允许更改函数所采用的参数数量。
  • @user1550365 然后创建另一个函数。
  • 很确定没有办法只使用原始宽度作为第一个参数我认为你需要使用默认的可选第二个参数
  • @user1550365:Marcin 说了什么。请记住,您在 Python 中也可以在函数中创建函数。但是我会创建一个默认的可选第二个参数i=0(或者level=0 可能是一个更好的名称),虽然它添加了一个参数,但您仍然可以只使用一个参数来调用它。
【解决方案2】:

试试这个

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多