c 语言求阶乘是循环章节经典上机实验题,阶乘数学定义是 n! 等于从 1 一直乘到 n,规定 0 的阶乘和 1 的阶乘结果都是 1,比如 5! 等于 1 乘 2 乘 3 乘 4 乘 5 等于 120,课程里面一般有两种写法,第一种是 for 或者 while 循环累乘实现,也是基础作业最常要求的写法,第二种是递归函数实现,用来练习函数递归调用知识点。写阶乘代码最容易出错的地方就是累乘变量初始值,很多同学错误把初始值设成 0,这样最后乘积永远是 0,正确初始值应该是 1,同时还要注意整数溢出,int 类型能表示范围有限,数字偏大之后阶乘结果会超出 int 上限,出现结果错误,实验报告里面可以把这个边界问题作为调试分析记录。
基础循环实现代码
include
int main()
{
int n,i;
long long result = 1;
printf("请输入整数n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
result = result i;
}
printf("%d的阶乘是%lld\n",n,result);
return 0;
}
递归实现代码
include
long long fact(int n)
{
if(n<=1)
return 1;
else
return n fact(n-1);
}
int main()
{
int n;
printf("请输入整数n:");
scanf("%d",&n);
printf("%d的阶乘是%lld\n",n,fact(n));
return 0;
}
执行步骤
第一步 输入需要计算阶乘的整数 n
第二步 累乘变量 result 初始化为 1
第三步 使用循环从 1 遍历到 n,每一轮和 result 相乘更新结果
第四步 如果是递归版本,设置递归终止条件 n 等于 1 返回 1,否则返回 n 乘以 n 减 1 的阶乘
第五步 输出最终阶乘结果
对比表格
实现方式 核心特点 知识点
for 循环累乘 迭代重复乘法 循环结构
递归函数 函数自己调用自己 递归函数
重点注意事项
第一 累乘变量初始值必须是 1,不能写 0,这是最高频错误
第二 0! 和 1! 结果都等于 1,测试数据要包含这两个边界值
第三 int 存储阶乘很容易溢出,数值大建议使用 long long 类型
第四 递归必须写终止条件,缺少终止条件会无限递归,程序栈溢出崩溃
第五 如果输入负数,阶乘数学上无意义,代码可以增加判断提示输入错误
【常见问题】
问题 1 c 语言求阶乘累乘变量为什么初始值是 1
回答 1 c 语言求阶乘是连续乘法运算,如果初始值是 0,任何数字乘 0 结果都是 0,所以累乘变量必须初始化为 1。
问题 2 c 语言求阶乘递归为什么一定要写终止条件
回答 1 c 语言求阶乘递归依靠函数自我调用,没有终止条件就会无限调用,栈溢出程序崩溃,终止条件一般是 n 小于等于 1 返回 1。
问题 3 c 语言求阶乘为什么大数字结果出错
回答 1 c 语言求阶乘数值增长很快,普通 int 类型存储空间有限,数值过大发生整数溢出,改用 long long 类型可以扩大可计算范围。
【免责申明】
本文内容仅用于 c 语言课程实验学习参考,阶乘数值增长极快,即使 long long 也存在上限,输入超大数字依然会溢出,因编码错误或者溢出造成结果异常,相关风险由使用者自行承担。


