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

递归函数test的输出解析及循环条件变更后的结果咨询

递归函数执行流程解析

原代码(循环条件i<2)的输出解释

原代码如下:

void test(int start)
{
    for(int i=start; i<2; i++)
    {
        printf("%d", start);
        test(i+1);
    }
}

// 调用入口:test(0);

调用test(0)的输出为010,最后一个0的来源可通过逐步拆解执行流程明确:

  1. 进入test(0),循环变量i初始化为0,满足i<2:
    • 打印0,当前输出:0
    • 调用test(1),进入该函数:
      • i初始化为1,满足i<2:
        • 打印1,当前输出:01
        • 调用test(2),进入后i=2不满足i<2,循环直接结束,函数返回
      • test(1)的i自增到2,不满足循环条件,函数返回
  2. 回到test(0)的循环,i自增到1,满足i<2:
    • 打印0,当前输出:010
    • 调用test(2),同样因i=2不满足条件直接返回
  3. test(0)的i自增到2,循环结束,函数返回

可见最后一个0是test(0)循环的第二次迭代(i=1时)打印的结果。

修改循环条件为i<3后的输出结果

修改后的代码:

void test(int start)
{
    for(int i=start; i<3; i++)
    {
        printf("%d", start);
        test(i+1);
    }
}

// 调用入口:test(0);

逐步执行后的最终输出为0121020,执行流程拆解:

  1. test(0),i=0:
    • 打印0 → 输出:0
    • 调用test(1):
      • test(1),i=1:
        • 打印1 → 输出:01
        • 调用test(2):
          • test(2),i=2:
            • 打印2 → 输出:012
            • 调用test(3),循环不满足直接返回
          • test(2)的i自增到3,循环结束返回
        • test(1)的i自增到2:
          • 打印1 → 输出:0121
          • 调用test(3),直接返回
        • test(1)的i自增到3,循环结束返回
    • test(0)的i自增到1:
      • 打印0 → 输出:01210
      • 调用test(2):
        • test(2),i=2:
          • 打印2 → 输出:012102
          • 调用test(3),直接返回
        • test(2)的i自增到3,循环结束返回
    • test(0)的i自增到2:
      • 打印0 → 输出:0121020
      • 调用test(3),直接返回
    • test(0)的i自增到3,循环结束返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:52:45