停止递归函数Python
我该怎么做才能使倒计时按预期进行?应该是这样的:停止递归函数Python,python,function,recursion,Python,Function,Recursion,我该怎么做才能使倒计时按预期进行?应该是这样的: 4 3 2 1 0 1 0 1 0 1 0 1 0 1 0 1 猜测你的问题的解决方案是很好的,但是把你提出的解决方案当作你的问题。您试图做的是倒计时,然后再向上,而不是停止递归。停止递归需要添加exit()作为递归,这是不合适的;正常的程序执行允许自然解析(即,将返回给调用者)。修改sys.setrecursionlimit(10)也不推荐,因为它人为地操纵了一个全局限制,这很容易用一个合适的基本条件来完成 这里有一种方法:在递归调用堆栈中
4
3
2
1
0
1
0
1
0
1
0
1
0
1
0
1
猜测你的问题的解决方案是很好的,但是把你提出的解决方案当作你的问题。您试图做的是倒计时,然后再向上,而不是停止递归。停止递归需要添加
exit()
作为递归,这是不合适的;正常的程序执行允许自然解析(即,将
返回给调用者)。修改sys.setrecursionlimit(10)
也不推荐,因为它人为地操纵了一个全局限制,这很容易用一个合适的基本条件来完成
这里有一种方法:在递归调用堆栈中打印n
,然后在到达基本情况后,在备份过程中打印n
。换句话说,每个函数都会立即打印其编号,但在它下面的所有递归函数打印完编号并解析之前,不会再次打印其编号
例如,第一个调用的函数,bounce(4)
立即打印4
,然后等待bounce(3)
、bounce(2)
、bounce(1)
和bounce(0)
完成工作并返回。完成后,bounce(4)
最终再次打印4
,然后返回调用范围。所有调用的函数的行为都相同(bounce(0)
有点不同;我们必须有条件地将其限制为单个打印以满足要求--如果n:
测试数字是否为非零)
输出:
4
3.
2.
1.
0
1.
2.
3.
4.
如果您在理解调用堆栈如何工作时遇到困难,请尝试添加缩进以显示您的深度(时间从上到下增加,递归深度从左到右增加)
初始呼叫,跳出(4)
|
v
4基本情况,反弹(0)
3 |
2 v
1.
0
1非常感谢!但我不明白“如果n:打印n”怎么打印出1,2,3,4?是的!非常感谢。很好的解释!
4
3
2
1
0
1
0
1
0
1
0
1
0
1
0
1
>>> bounce(4)
4
3
2
1
0
1
2
3
4
>>> bounce(0)
def bounce(n):
if n >= 0:
print(n)
bounce(n - 1)
if n:
print(n)
if __name__ == "__main__":
bounce(4)
def bounce(n, depth=0):
if n >= 0:
print("{}{}".format(" " * depth, n))
bounce(n - 1, depth + 1)
if n:
print("{}{}".format(" " * depth, n))
if __name__ == "__main__":
bounce(4)