0

我需要从递归解决方案中打印出特定的星星图案。输入看起来很像这样:

printPattern(2,8)

输出将是:

  *
  **
   *
  ****
    *
    **
     *
  ********
      *
      **
       *
      ****
        *
        **
         *

是的,开头已经有 2 个空格。对于 printPattern(0,4):

*
**
 *
****
  *
  **
   *

我已经从以下内容开始,但我知道我的方向是错误的,“重复”任何关于如何继续的指示,还是应该放弃它?

现在我所做的就是找出偶数和奇数行,我计划从 0 开始重复打印星,但我得到一个 UnboundLocalError:

repeat = 0
def printPattern(n,k):
    'prints a pattern of stars'
    if n == k:
        print("Done")
    elif n%2 == 0:
        print('even')
        repeat +=1
        printPattern(n+1,k)
    else:
        print (end=' ')*repeat
        print ('*')
        repeat+=1
        printPattern(n+1,k) 
4

1 回答 1

0

大多数讨论都集中在repeat真正不需要的变量上,无论是作为全局变量还是作为参数。您的终止案例n == k似乎很奇怪,因为终止取决于kk不取决于n. 我认为k < 1真的是当这种递归停止时。最后,您的偶数案例不会打印任何内容。

我把这个问题分为三个步骤:递归地在中心左侧打印一个较小的图案;打印中心;递归地在中心右侧打印一个较小的图案偏移:

def printPattern(n, k):
    ''' print a pattern of stars '''

    if k < 1:  # base case
        return

    printPattern(n, k // 2)
    print(' ' * n, '*' * k, sep='')
    printPattern(n + k - k // 2, k // 2)

print(2, 8)
printPattern(2, 8)
print(0, 4)
printPattern(0, 4)
print(5, 9)
printPattern(5, 9)

输出

> python3 test.py
2 8
  *
  **
   *
  ****
    *
    **
     *
  ********
      *
      **
       *
      ****
        *
        **
         *
0 4
*
**
 *
****
  *
  **
   *
5 9
     *
     **
      *
     ****
       *
       **
        *
     *********
          *
          **
           *
          ****
            *
            **
             *
> 

由于没有提供示例,并且我无法从您的代码中对其进行逆向工程,因此我没有对奇数输入做任何太有趣的事情。

于 2017-11-04T19:01:13.697 回答