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

递归函数bottom_up执行结果疑惑求助:为何输出1到5?

理解Bottom-Up递归的执行逻辑

先看你提供的两段代码核心差异:递归调用和输出语句的顺序不同,这直接决定了执行流程和结果。

拆解bottom_up(5)的执行过程

递归函数的执行依赖「调用栈」——每一次递归调用都会把当前函数的状态(比如未执行完的代码)暂存起来,直到被调用的子函数完全执行完毕,才会回到当前函数继续执行剩下的代码。

调用bottom_up(5)时,执行步骤如下:

  • 调用bottom_up(5):进入else分支,先执行bottom_up(4),print(5)暂时不执行
  • 调用bottom_up(4):进入else分支,先执行bottom_up(3),print(4)暂时不执行
  • 调用bottom_up(3):进入else分支,先执行bottom_up(2),print(3)暂时不执行
  • 调用bottom_up(2):进入else分支,先执行bottom_up(1),print(2)暂时不执行
  • 调用bottom_up(1):进入else分支,先执行bottom_up(0),print(1)暂时不执行
  • 调用bottom_up(0):触发if条件,直接返回(没有执行任何代码)
  • 回到bottom_up(1):执行之前暂存的print(1),输出1,然后返回
  • 回到bottom_up(2):执行之前暂存的print(2),输出2,然后返回
  • 回到bottom_up(3):执行之前暂存的print(3),输出3,然后返回
  • 回到bottom_up(4):执行之前暂存的print(4),输出4,然后返回
  • 回到bottom_up(5):执行之前暂存的print(5),输出5,然后返回

整个过程是先递归到最底层的终止条件,再从底层往上层回溯执行输出语句,所以最终输出顺序是1、2、3、4、5。

top_down(5)的执行对比(参考)

top_down的逻辑是先执行输出,再递归调用,执行步骤完全相反:

  • 调用top_down(5):进入else分支,先print(5)输出5,再调用top_down(4)
  • 调用top_down(4):进入else分支,先print(4)输出4,再调用top_down(3)
  • 调用top_down(3):进入else分支,先print(3)输出3,再调用top_down(2)
  • 调用top_down(2):进入else分支,先print(2)输出2,再调用top_down(1)
  • 调用top_down(1):进入else分支,先print(1)输出1,再调用top_down(0)
  • 调用top_down(0):触发if条件,直接返回
  • 逐层返回,执行结束,输出顺序为5、4、3、2、1

内容的提问来源于stack exchange,提问作者Tristan Reza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:15:31