我要写一个递归函数 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的幂。
答案 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)