Python 递归星型
我需要从递归解决方案中打印特定的星形图案。输入看起来很像这样:Python 递归星型,python,recursion,Python,Recursion,我需要从递归解决方案中打印特定的星形图案。输入看起来很像这样: printPattern(2,8) 其结果是: * ** * **** * ** * ******** * ** * **** * ** * 是的,开头已经有2个空格。对于printPattern(0,4): 我已经从下面的内容开始了,但是我知道我在错误的方向上“重复”任何关于如何继
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)
大多数讨论集中在
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)
由于没有提供示例,而且我无法从您的代码中对其进行反向工程,因此我对奇数输入没有做任何太有趣的事情。您可以发布您迄今为止尝试过的内容,或许我们可以帮助您解决这些问题吗?问题包括“我对您说了一大堆话,现在您可以完成所有事情了”没有多大用处…将
repeat
作为参数传递给函数(否则需要在函数顶部设置global repeat
,以允许repeat+=1
,因为python中的名称绑定和作用域是如何工作的不确定这有多含糊,我给出了迄今为止我所知道的,不确定还有什么要做。print(end='')*repeat
是一个类型错误(print
返回无)。请尝试:print(''*repeat,end='')
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
*
**
*
****
*
**
*
*********
*
**
*
****
*
**
*
>