递归星形图案

时间:2012-10-16 15:58:26

标签: python recursion

我需要一种特定的星星模式来从递归解决方案中打印出来。输入看起来很像:

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) 

1 个答案:

答案 0 :(得分:0)

大多数讨论都集中在repeat变量上,它实际上并不需要作为全局变量或参数。您的终止案例n == k似乎很奇怪,因为终止取决于k,但k并不依赖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
     *
     **
      *
     ****
       *
       **
        *
     *********
          *
          **
           *
          ****
            *
            **
             *
> 

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