不理解Python递归函数输出3 2 1 1 2 3的运行逻辑求助
递归输出逻辑说明
核心原因是:函数调用过程中,遇到子函数调用时,当前函数后续的代码会暂停执行,直到被调用的子函数完全运行结束,才会回到当前断点继续执行剩下的代码,递归本质就是函数自己调用自己,完全符合这个规则。
你可以顺着test=3的完整执行流程一步步看:
- 第一层调用
printFun(3):test≥1,先执行第一个print输出3,接着调用printFun(2),此时第一层的第二个print进入暂停状态,等待printFun(2)完全执行完再运行。 - 第二层调用
printFun(2):先执行第一个print输出2,接着调用printFun(1),第二层的第二个print进入暂停状态,等待printFun(1)执行结束。 - 第三层调用
printFun(1):先执行第一个print输出1,接着调用printFun(0),第三层的第二个print进入暂停状态,等待printFun(0)执行结束。 - 第四层调用
printFun(0):触发test < 1的基例条件,直接返回,没有输出。
到这里为止是递归的递推阶段,你已经理解的3 2 1就是这个阶段的输出。接下来进入回溯阶段,从最内层往外层依次执行之前暂停的代码:
- 回到第三层
printFun(1)的断点(也就是printFun(0)调用结束的下一行),执行第二个print输出1,第三层函数执行结束返回。 - 回到第二层
printFun(2)的断点,执行第二个print输出2,第二层函数执行结束返回。 - 回到第一层
printFun(3)的断点,执行第二个print输出3,第一层函数执行结束返回。
把两个阶段的输出按顺序拼接,最终结果就是3 2 1 1 2 3。你困惑的第二个print刚好都在回溯阶段执行,回溯是从最内层往外层走,所以输出顺序是反过来的1 2 3。
内容的提问来源于stack exchange,提问作者mc_1998
相关产品推荐
相关产品推荐

