我正在处理python中的递归,试图在给用户输入时使用递归来打印星号,例如:3程序应该输出:
***
**
*
**
***当用户输入为3时,我设法打印输出如下:
***
**
*当printPatternRecur被调用时,它打印到目前为止管理的输出,
def printPattern(n):
# Base case
if (n < 1):
return
print('*', end = " ")
printPattern(n - 1)
def printPatternRecur(n):
# Base case
if (n < 1):
return
printPattern(n)
print("")
printPatternRecur(n - 1)预期的输出应该像一开始提到的那样递归地调用。对于使用递归解决这一问题的更简单方法的任何建议也将受到赞赏。此外,还想知道如何在处理递归问题时克服思维过程,或者了解递归的概念的任何文章。谢谢!
发布于 2019-08-05 21:20:43
您可以这样做,例如:
>>> def pattern(n):
... if n == 1:
... return print("*")
... print("*" * n)
... pattern(n - 1)
... print("*" * n)
...
>>> pattern(5)
*****
****
***
**
*
**
***
****
*****您还可以使用递归打印函数代替print("*" * n)。
思考过程可以是这样的:每一个递归调用都会降低一个层次,当您从递归调用中返回时,您将提升一级。如果逆时针方向旋转90度,您也可以在输出中看到这个V-shaped模式:您越走越深,深入递归,然后到达基本情况,然后开始上升,直到退出第一个调用。
发布于 2019-08-05 21:35:52
为了得到一个简单的答案,这里有一个细微的变化。“诀窍”是知道在哪里调用递归:在print语句之间。何时退出:当我们到达1 (如果我们要小心的话,小于1 ),但不是在打印中间最后一个孤独的星号之前。
def printPattern(n):
print('*' * n)
if n <= 1: return
printPattern(n - 1)
print('*' * n)它如预期的那样运作:
printPattern(5)
*****
****
***
**
*
**
***
****
*****发布于 2019-08-05 21:32:10
您可以使用外部包装函数:
def outer(_d):
def tri(s, d, flag = 0):
if s == 1:
return '*'+'\n'+tri(2, d, 1)
return ('*'*s)+'\n'+tri(s-1 if not flag else s+1, d, flag) if not flag or s != d else '*'*d
return tri(_d, _d)
print(outer(3))输出:
***
**
*
**
***https://stackoverflow.com/questions/57366181
复制相似问题