解题思路:
(1)求n!可以用递推方法:即从1开始,乘2,再乘3……一直乘到n。
(1)求n!可以用递推方法:即从1开始,乘2,再乘3……一直乘到n。
(2)递推法的特点是从一个已知的事实(如1!=1)出发,按一定规律推出下一个事实(如2!=1!*2),再从这个新的已知的事实 出发,再向下推出一个新的事实(3!=3*2!)。n!=n*(n-1)!。
(3)求n!也可以用递归方法,即5!等于4!×5,而4!=3!×4…,1!=1
(4)可用下面的递归公式表示:
#include <stdio.h>
int main()
{int fac(int n);
int n; int y;
printf("input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n)
{
int f;
if(n<0)
printf("n<0,data error!");
else if(n==0 | | n==1)
f=1;
else f=fac(n-1)*n;
return(f);
}
补充:例7.17 输出1到5的阶乘值。
解题思路:可以编一个函数用来进行连乘,如第1次调用时进行1乘1,第2次调用时再乘以2,第3次调用时再乘以3,依此规律进行下去。
若非必要,不要多用静态局部变量
n!问题用循环解释就是:
#include <stdio.h>
int main()
{int fac(int n);
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
return 0;
}
int fac(int n)
{static int f=1;
f=f*n;
return(f);
}
若非必要,不要多用静态局部变量
n!问题用循环解释就是:
int find (int i);
{
int n,val=1;
for (n=i;n>1;n--)
{
val*=n;
return val;
}
}