停止递归函数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)