递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n,用公式表示就是:n! = 1×2×3×4×…×(n-2)×(n-1)×n
使用循环实现:
设循环变量为 i,初值为 1,i 从 1 变化到 n;依次让 i 与 sum 相乘,并将乘积赋给 sum。
① 定义变量 sum,并赋初值 1。
② i 自增 1。
③ 直到 i 超过 n
int Fun(int n)//非递归
{
int sum = 1;
int i = 0;
for (i = 1; i <= n; i++)
{
sum = sum * i;
}
return sum;
}
使用递归实现:
int Fun(int n)//递归
{
if (n <= 1)
return 1;
return n * Fun(n - 1);
}
测试结果:
int main()
{
int n = 0;
scanf("%d", &n);
int sum = Fun(n);
printf("%d\n", sum);
return 0;
}