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

C语言使用递归实现数字阶乘计算功能运行失败,该如何排查解决?

问题原因

  • 你的递归阶乘函数缺少基线终止条件,递归会无限向下调用,最终触发栈溢出导致程序崩溃。按照阶乘的数学定义,0! = 1、1! = 1,当参数b小于等于1时应该直接返回1,不能继续递归。
  • 额外存在边界风险:如果用户输入负数,或者输入的数字过大(13的阶乘就已经超过int类型的存储上限),会得到错误结果甚至程序异常。

修正后的可运行代码

#include <stdio.h>

int factorial(int b)
{
    // 增加递归终止条件
    if (b <= 1) {
        return 1;
    }
    return b * factorial(b - 1);
}

int main()
{
    int num;
    printf("Enter a no:\n");
    scanf("%d", &num);
    // 增加输入合法性校验
    if (num < 0) {
        printf("Error: 负数没有阶乘\n");
        return 1;
    }
    printf("factorial is %d\n", factorial(num));
    return 0;
}

补充优化建议

  • 如果需要计算更大数值的阶乘,建议把返回值和变量类型替换为long long,可以支持到20以内的阶乘计算,超过这个范围需要使用大整数运算方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:27:01