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

带std::vector的C++双重递归函数执行流程分步解析请求

双重递归函数F的执行过程解析

先明确几个关键前提:

  • b是引用传递:所有递归调用共享同一个变量值,每次进入函数(未触发终止条件时)都会先执行b -=1
  • 递归调用顺序:C++中函数参数求值顺序为从左到右,因此F(v,a-1,b) + F(v,a,b)会先执行左侧递归,再执行右侧递归
  • 向量元素添加时机:v.push_back(a)只会在左右递归都执行完毕、计算出当前a的值后才会执行,因此vector中的元素是按照递归函数的返回顺序(从最深层到上层)添加的
  • 终止条件:当a<=0或b<=2时,直接返回当前a的值

初始状态

  • 向量v为空
  • 变量b=7
  • 调用F(v, 15, b)

步骤1:进入F(a=15, b=7)

  1. 不满足终止条件(15>0且7>2),执行b -=1,此时b=6
  2. 先执行左侧递归:F(v, 14, 6)

步骤2:进入F(a=14, b=6)

  1. 不满足终止条件,执行b -=1,此时b=5
  2. 先执行左侧递归:F(v, 13, 5)

步骤3:进入F(a=13, b=5)

  1. 不满足终止条件,执行b -=1,此时b=4
  2. 先执行左侧递归:F(v, 12, 4)

步骤4:进入F(a=12, b=4)

  1. 不满足终止条件,执行b -=1,此时b=3
  2. 先执行左侧递归:F(v, 11, 3)

步骤5:进入F(a=11, b=3)

  1. 不满足终止条件,执行b -=1,此时b=2
  2. 执行左侧递归:F(v, 10, 2) → 触发终止条件(b<=2),返回10
  3. 执行右侧递归:F(v, 11, 2) → 触发终止条件,返回11
  4. 计算a = 10 + 11 = 21,执行v.push_back(21),此时v=[21]
  5. 返回21,回到步骤4

回到步骤4:F(a=12, b=2)

  1. 左侧递归返回21,执行右侧递归:F(v, 12, 2) → 触发终止条件,返回12
  2. 计算a = 21 + 12 = 33,执行v.push_back(33),此时v=[21, 33]
  3. 返回33,回到步骤3

回到步骤3:F(a=13, b=2)

  1. 左侧递归返回33,执行右侧递归:F(v, 13, 2) → 触发终止条件,返回13
  2. 计算a = 33 + 13 = 46,执行v.push_back(46),此时v=[21, 33, 46]
  3. 返回46,回到步骤2

回到步骤2:F(a=14, b=2)

  1. 左侧递归返回46,执行右侧递归:F(v, 14, 2) → 触发终止条件,返回14
  2. 计算a = 46 + 14 = 60,执行v.push_back(60),此时v=[21, 33, 46, 60]
  3. 返回60,回到步骤1

回到步骤1:F(a=15, b=2)

  1. 左侧递归返回60,执行右侧递归:F(v, 15, 2) → 触发终止条件,返回15
  2. 计算a = 60 + 15 = 75,执行v.push_back(75),此时v=[21, 33, 46, 60, 75]
  3. 返回75,递归结束

最终向量v中的元素依次输出就是21 33 46 60 75,与程序输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:19