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

为什么该C语言阶乘实现程序输入5输出8,未得到正确阶乘结果?

C语言阶乘代码结果异常原因分析

你的代码存在三处核心逻辑错误,共同导致结果不符合预期:

  • if判断的逗号运算符逻辑错误
    C语言中逗号表达式的最终取值为最后一个子表达式的计算结果,你编写的if (a >= 1, a--)不会将a >= 1作为判断条件,实际判断的是a--的返回值(即a自减前的原值)。输入5进入FAC函数时,a初始为5,执行逗号表达式后a变为4,条件判断因5为非0值成立。
  • return语句优先级错误+递归代码无法执行
    你预期计算的是(a+1)*a,但C语言中乘法优先级高于加法,a + 1 * a实际等价于a + (1 * a) = 2*a。同时你将递归调用FAC(a);放在了return语句之后,该行代码永远不会被执行,递归逻辑完全失效,函数第一次满足条件就直接返回2*4=8,和你得到的输出完全一致。
  • 缺少递归基线返回逻辑
    当a自减到0时if条件不成立,函数没有定义返回值,会返回未定义的随机值,即使前面逻辑修正也会导致结果异常。

修正后的参考代码

#include <stdio.h>

int FAC(int a)
{
    // 基线条件:0和1的阶乘都是1
    if (a <= 1) {
        return 1;
    }
    // 递归逻辑:n! = n * (n-1)!
    return a * FAC(a - 1);
}

int main() 
{
    int a = 0;
    int ret = 0;
    scanf("%d", &a);
    ret = FAC(a);
    printf("%d\n", ret);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:02