一.题目大概:
给一个数n,利用程序计算出它的阶乘,并把结构输出打印出来。
二.算法分析:
(1)非递归算法:设置一个变量从1加到n,每次加完后,都让它跟初值为1的变量sum相乘,直到跳出循环后,sum的值就是该数的阶乘结果。
(2)递归算法:计算n的阶乘,如果知道n-1的阶乘,再乘以n就是n的阶乘了。例如:5!=5*4!
从上面例子可以得出一个函数执行语句:
n*fun(n-1)
然后利用该语句进行递归。
三.代码:
(1)
#include<stdio.h>
int main()
{
int n,i;
long sum=1;
printf("请输入一个数字:");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum*=i;
printf("%d的阶乘为%ld\n",n,sum);
return 0;
}
(2)
#include<stdio.h>
long fun(int n)
{
if(n==1)
return 1;
else
return n*fun(n-1);
}
int main()
{
int n,i;
long sum=1;
printf("请输入一个数字:");
scanf("%d",&n);
sum*=fun(n);
printf("%d的阶乘为%ld\n",n,sum);
return 0;
}