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

含连续两次递归调用的多重递归代码输出-1的原因咨询

C递归函数输出中-1的来源解释

先看你的代码:

#include <stdio.h>

int fun(int n){
    if(n>=0){
        printf("%d\n",n); 
        return fun(n-1);  //6 5 4  3  2  1  0
        return fun(n-3);   //4 3 2  1  0  -1  -2
    }
}
int main()
{ 
    printf ("%d", fun(7));
    return 0;
}

运行后输出:

7
6
5
4
3
2
1
0
-1

为什么会出现-1?

首先明确:前面的7到0都是fun函数内部的printf打印的,最后一行的-1是main函数里打印的fun(7)的返回值。

具体执行流程:

  • main调用fun(7),n=7满足n>=0,打印7后调用fun(6)
  • 这个递归会一直持续到fun(0):打印0后调用fun(-1)
  • 当n=-1时,不满足if(n>=0)的条件,函数执行完if块后没有任何后续语句,直接退出函数

在C语言里,对于声明为返回int类型的函数,如果没有显式写return语句返回值,函数会返回一个不确定的栈值(属于未定义行为)。在你的运行环境中,这个值恰好是-1,所以main里的printf("%d", fun(7))就把这个值打了出来。

另外提一句:代码里的return fun(n-3);是完全没用的死代码,因为前面的return fun(n-1);已经终止了函数,这行永远不会被执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:05:13