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

求讲解这段C++递归代码的运行逻辑,触发base条件后流程是怎样的?

递归代码运行逻辑详解

首先拆解fun函数的固定执行规则:

  • 当传入参数n == 0时,直接结束函数返回,不做任何操作
  • 当n > 0时,执行5次循环:每次先打印当前的n值,再调用fun(n-1),等fun(n-1)完全执行完后,再进入下一次循环

从小规模参数入手理解逻辑

我们从最小的参数值开始推导,更容易找到规律:

1. n=1的执行过程

调用fun(1)时:

  1. n不为0,进入循环,i从0到4共执行5次:
    • i=0:打印1,调用fun(0)直接返回,本次循环结束
    • i=1:打印1,调用fun(0)直接返回,本次循环结束
    • i=2:打印1,调用fun(0)直接返回,本次循环结束
    • i=3:打印1,调用fun(0)直接返回,本次循环结束
    • i=4:打印1,调用fun(0)直接返回,本次循环结束
      最终fun(1)的输出是:1 1 1 1 1

2. n=2的执行过程

调用fun(2)时:

  1. n不为0,进入循环,共执行5次:
    • 每次循环先打印2,再调用fun(1)(已知fun(1)会输出5个1)
  2. 5次循环结束后,总输出为5组「2 后面跟5个1」,也就是:
    2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1

通用规律

由此可以推出通用规则:fun(k)的输出,是5组重复的「k + fun(k-1)的全部输出」

触发终止条件后的回溯逻辑

你能看懂的开头5 4 3 2 1,是第一次递归深入到最底层的过程:

main调用fun(5) → 进入fun(5)第一次循环(i=0)→ 打印5 → 调用fun(4) → 进入fun(4)第一次循环(i=0)→ 打印4 → 调用fun(3) → 进入fun(3)第一次循环(i=0)→ 打印3 → 调用fun(2) → 进入fun(2)第一次循环(i=0)→ 打印2 → 调用fun(1) → 进入fun(1)第一次循环(i=0)→ 打印1 → 调用fun(0)触发终止条件返回

触发n==0后,程序不会直接结束,而是逐层回到上一层函数,继续执行没走完的循环,也就是递归的回溯过程:

  1. 回到fun(1)的i=0循环,已经执行完fun(0),i自增到1,进入第二次循环:打印1,调用fun(0)返回 → i=2:打印1 → 直到fun(1)的5次循环全部执行完,输出另外4个1
  2. fun(1)执行完毕,回到fun(2)的i=0循环,i自增到1,进入第二次循环:打印2,调用fun(1)输出5个1 → 重复到fun(2)的5次循环全部执行完
  3. fun(2)执行完毕,回到fun(3)的i=0循环,i自增到1,进入第二次循环:打印3,调用fun(2)输出fun(2)的全部内容 → 重复5次循环
  4. 以此类推,逐层向上回溯,直到最上层fun(5)的5次循环全部执行完毕,整个程序结束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:09