递归C函数执行return后重复执行if语句的问题排查
问题解答
关于return语句的终止行为
函数执行return语句后,当前正在运行的函数实例会立即终止,并将返回值传递给调用它的上层函数,上层函数会从调用该函数的位置继续往下执行,并非整个程序直接终止。
你的递归函数异常原因
你的代码存在两个核心问题:
递归调用未传递返回值,也未终止当前函数
当你调用step_recursion(new_number / 2, steps + 1)或step_recursion(new_number * 3 + 1, steps + 1)时,只是发起了递归调用,但没有接收递归的返回结果,也没有在调用后立即return。这意味着递归调用完成后,当前函数会继续执行后续的代码(比如第二个if (new_number % 2 == 1)判断),最后才返回当前函数的steps值,而非递归得到的最终步数。分支逻辑错误,偶数判断后仍会执行奇数判断
你用了两个独立的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
相关产品推荐
相关产品推荐

