You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不理解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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:24:02