C语言递归函数返回值异常:预期返回6却得到1
递归函数返回值不符合预期的问题排查与解决
你的递归函数逻辑存在核心问题:调用func1(i+1)后,没有将递归调用的返回值向上传递,而是直接返回当前的参数i。这导致当递归触达基准情况(i=6)返回6后,这个值并没有被上层递归调用接收并返回,最终最外层的func1(1)只会返回自身的参数1。
修复后的代码
#include<stdio.h> int func1(int i){ if(i == 6) { // 基准情况 printf("\nEnd1"); return i; } printf("%d ", i); // 关键修改:返回递归调用的结果,让基准值沿调用链传递 return func1(i + 1); } int main() { printf("\n%d", func1(1)); return 0; }
修复说明
原代码中,func1(i+1)仅被执行,但它的返回值被直接丢弃,之后函数仍执行return i。修改后,我们将递归调用的结果作为当前函数的返回值,这样基准情况返回的6会沿着递归调用链逐层向上传递,最终被最外层的func1(1)返回,得到你期望的输出:
1 2 3 4 5
End1
6
内容的提问来源于stack exchange,提问作者pvt-Tron
相关产品推荐
相关产品推荐

