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

C语言递归实现阶乘:为何代码无需else return 1仍能运行?

为啥递归阶乘不用else return 1也能正常运行?

嘿,这个问题我刚学C的时候也纠结过!其实核心原因是return语句会直接终止当前函数的执行,所以你写的代码里,else其实是隐含存在的,只是没写出来而已。

举个例子,假设你的代码是这样的:

int factorial(int n) {
    if (n == 0)
        return 1;
    return n * factorial(n - 1);
}

咱们拆解一下执行逻辑:

  • 当传入的n等于0时,if条件成立,执行return 1,函数直接结束,后面的return n * factorial(n-1)根本不会被执行到。
  • 当n不等于0时,if条件不成立,跳过if块,直接执行后面的递归返回语句。

这种写法和带else的版本完全等价:

int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

只不过前者利用了return的终止特性,省略了else关键字而已——代码更简洁,但逻辑是一模一样的。

不过这里要提个小注意:如果传入负数的话,递归会无限调用下去(因为n永远不会降到0),最后会栈溢出,但这和有没有else没关系,是递归终止条件的覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:45