我需要一种特定的星星模式来从递归解决方案中打印出来。输入看起来很像:
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)
答案 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
*
**
*
****
*
**
*
*********
*
**
*
****
*
**
*
>
由于没有提供任何示例,我无法从您的代码中对其进行反向工程,因此我没有对奇数输入做任何有趣的事情。