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

递归C函数执行return后重复执行if语句的问题排查

问题解答

关于return语句的终止行为

函数执行return语句后,当前正在运行的函数实例会立即终止,并将返回值传递给调用它的上层函数,上层函数会从调用该函数的位置继续往下执行,并非整个程序直接终止。

你的递归函数异常原因

你的代码存在两个核心问题:

  1. 递归调用未传递返回值,也未终止当前函数
    当你调用step_recursion(new_number / 2, steps + 1)或step_recursion(new_number * 3 + 1, steps + 1)时,只是发起了递归调用,但没有接收递归的返回结果,也没有在调用后立即return。这意味着递归调用完成后,当前函数会继续执行后续的代码(比如第二个if (new_number % 2 == 1)判断),最后才返回当前函数的steps值,而非递归得到的最终步数。

  2. 分支逻辑错误,偶数判断后仍会执行奇数判断
    你用了两个独立的if判断处理奇偶情况,而非if-else if。即使new_number是偶数,执行完偶数分支的递归后,程序仍会进入奇数分支的判断(虽然此时条件不成立不会执行递归,但会干扰正常执行流程),加剧了函数执行逻辑的混乱。

修复建议

修改代码,让递归调用后立即返回结果,同时调整分支为if-else if结构:

int step_recursion(int number, int input_steps)
{
    int new_number = number;
    int steps = input_steps;

    if (new_number == 1)
    {
        return steps;
    }

    if (new_number % 2 == 0)
    {
        return step_recursion(new_number / 2, steps + 1);
    }
    else // 处理奇数情况(已排除new_number=1的场景)
    {
        return step_recursion(new_number * 3 + 1, steps + 1);
    }
}

这样每次递归调用后,当前函数会立即返回递归的结果,不会继续执行后续代码,最终会将最底层(new_number=1时)的steps值逐层传递回初始调用处。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:23