前提需备知识:
阶乘的公式:n!=n*(n-1)!
推导如下
递归法:
#include<stdio.h>
int fun(int n) //定义一个求阶乘的函数
{
if (n == 1) //如果为1,就不再递归,返回值为1的阶乘,即1
{
return 1;
}
else //不为1,继续递归
{
return n * fun(n - 1); //求阶乘公式
}
}
int main()
{
int n = 0, sum = 0;
scanf("%d", &n);
sum = n * fun(n - 1); //求阶乘公式
printf("%d\n", sum);
return 0;
}
非递归法(迭代,也就是循环):
#include<stdio.h>
int main()
{
int n = 0, i = 0, sum = 1; //sum初始值要为1,不能为0,不然0*任何数还是0
scanf("%d", &n);
for (i = n; i > 0; i--) //从n到1累乘
{
sum *= i; //阶乘的和
}
printf("%d\n", sum);
return 0;
}
但总体更推荐迭代(循环)法,因为当数越大时,迭代法的效率越高,递归就越慢,具体原因是关于栈区的创建和销毁的知识。当递归层次越深,还容易出现栈溢出的现象。所以要看情况使用递归,不要盲目使用