Python递归函数count_up执行疑问:第6行print语句为何会执行
代码执行逻辑解答
你对递归执行逻辑的理解存在偏差,核心问题是忽略了递归调用完成后,当前函数还会继续执行调用语句之后的剩余代码,具体执行过程拆解如下:
你提供的代码:
def count_up(start): if start <= 0: print(start) else: count_up(start - 1) print(start) count_up(5)
执行步骤:
- 第一层调用
count_up(5):参数start=5满足else分支条件,先执行第5行的count_up(4),当前count_up(5)暂停运行,等待count_up(4)执行完毕再继续后续代码 - 第二层调用
count_up(4):同理触发else分支,调用count_up(3),自身暂停等待子调用返回 - 以此类推,直到最内层调用
count_up(0):参数start=0满足if条件,执行打印0的操作,count_up(0)运行结束,返回到上一层count_up(1) - 回到
count_up(1)后,第5行的count_up(0)已经执行完成,接下来执行第6行的print(start),打印1,count_up(1)运行结束,返回到上一层count_up(2) - 后续每一层调用都会在子调用返回后,执行自身的第6行打印语句,依次输出2、3、4、5,直到最外层的
count_up(5)执行完毕,整个程序终止
简单来说,递归分为「向下调用」和「向上返回」两个阶段:你之前只考虑了向下调用到终止条件的过程,完全忽略了向上返回时,每层函数还要执行完调用递归之后剩下的代码,第6行就是在返回阶段依次执行的。
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

