为什么它向下倒数然后倒数?不想改变,只要理解就行了



为什么先往下数然后倒着数?不想改变,只要理解就好。

def bounce (n):
if n > 0:
print(n)
bounce(n-1)
print(n)
bounce(4)

结果:

4
3
2
1
0
1
2
3
4

向下计数,因为您打印参数(当为正数时),然后使用相同的值- 1进行递归调用。每个递归调用也打印它们的输入并进行递归调用,直到得到0。(该调用只打印0)

由于在退出每个递归调用时发生的最后一个print语句,它会计数。

在第一个print(n)和第二个print(n)之间,所有较小的数字都将被递归处理。只有当n为0时,函数才会输出一行,并且不调用自身返回。

那么如果我们把它按递归深度分解我们得到:

bounce(4)
|print(4)                     4   1st print(n)
|bounce(3)
|   |print(3)                 3   1st print(n)
|   |bounce(2)
|   |   |print(2)             2   1st print(n)
|   |   |bounce(1)
|   |   |   |print(1)         1   1st print(n)
|   |   |   |bounce(0)
|   |   |   |   |print(0)     0   2nd print(n)
|   |   |   |print(1)         1   2nd print(n)
|   |   |print(2)             2   2nd print(n)
|   |print(3)                 3   2nd print(n)
|print(4)                     4   2nd print(n)

作为一般规则,在递归函数调用自身之前按顺序执行,之后按相反顺序执行。

最新更新