Python递归函数bounce执行结果先递减后递增的原因是什么
Python bounce 函数运行逻辑解释
你看到的输出先递减再递增,是递归的递推阶段和回溯阶段分别执行打印操作导致的,我们直接拆解代码的执行流程就能明白:
首先是原函数代码:
def bounce (n): if n > 0: print(n) bounce(n-1) print(n) bounce(4)
递推阶段(n从4降到0,生成前半段输出)
每一层函数调用时,只要n>0就会先打印当前n的值,再调用下一层bounce(n-1),当前层的剩余代码会暂停,等下一层返回后再执行:
- n=4:满足n>0,打印
4,调用bounce(3),暂停执行后续代码 - n=3:满足n>0,打印
3,调用bounce(2),暂停执行后续代码 - n=2:满足n>0,打印
2,调用bounce(1),暂停执行后续代码 - n=1:满足n>0,打印
1,调用bounce(0),暂停执行后续代码 - n=0:不满足n>0,跳过if块内代码,直接执行
print(0),打印0,当前层执行完成,返回上一层
这个阶段输出就是:4、3、2、1、0
回溯阶段(n从0升到4,生成后半段输出)
下一层函数返回后,会继续执行当前层剩下的print(n)代码,从最内层往外层逐层返回:
- 回到n=1的层:执行剩余的
print(1),打印1,执行完成返回n=2的层 - 回到n=2的层:执行剩余的
print(2),打印2,执行完成返回n=3的层 - 回到n=3的层:执行剩余的
print(3),打印3,执行完成返回n=4的层 - 回到n=4的层:执行剩余的
print(4),打印4,全部执行结束
这个阶段输出就是:1、2、3、4
两段输出拼接起来就是你看到的最终结果。
内容的提问来源于stack exchange,提问作者KjellbergWille
相关产品推荐
相关产品推荐

