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
相关产品推荐
相关产品推荐

