星型模式递归Python

时间:2016-05-17 01:13:19

标签: python recursion

我要写一个递归函数 printPattern(),它将在星星中输出一个模式。第一个参数总是2的幂,是中间行中出现的最大星数。第二个参数(默认为0)是在每个模式的星形行之前放置的空格数。

输出的一个例子是:

>>> printPattern(8,0)
*
**
 *
****
  *
  **
   *
********
    *
    **
     *
    ****
      *
      **
       *

我从先前的问题中获得了与此问题类似的代码。

def patt(n,s=0):
    if n==1:
        print('*')
    else:
        patt(n-1)
        print('*'*n)
        patt(n-1)

我不确定如何更改它以便它只打印出2的幂。

2 个答案:

答案 0 :(得分:1)

而不是减去一个,除以二。

def patt(n,s=0):
    if n==1:
        print(' '*s,'*', sep='')
    else:
        patt(n//2, s)
        print(' '*s, '*'*n, sep='')
        patt(n//2, s + n//2)

对于空格,我们从没有缩进开始,并为第二次递归添加一半当前数字的缩进。这样,您在所需输出中显示的模式将会出现。

答案 1 :(得分:0)

我认为这应该有效:

def patt(n,s=0):
    if(n>0):
        patt(n//2,s)
        print(" "*s + "*"*n)
        patt(n//2,s+n//2)