例 8.8用递归方法求n!。
求n!可以用递推方法,即从1开始,乘2,再乘3……
一直乘到n。这种方法容易理解,也容易实现。递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实……这是和递归不同的。
求n!··也可以用递归方法,即5!等于4!×5,而4!=3!×4…1!=1。可用下面的递归公式表示:
n!=1(n=0,1)
n·(n-1)!(n>1)
有了例7.7的基础,很容易写出本题的程序:
float fac(int n)
{
float f;
if(n<0){ printf("n<0,dataerror!");f=-1;}
else if(n==0‖n==1) f=1;
else f=fac(n-1)*n;
return(f);
}
main()
{
int n;
float y;
printf("input a integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%15.0f",n,y);
}
运行情况如下:
input a integer number:10
10!= 3628800.
求n!可以用递推方法,即从1开始,乘2,再乘3……
一直乘到n。这种方法容易理解,也容易实现。递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实……这是和递归不同的。
求n!··也可以用递归方法,即5!等于4!×5,而4!=3!×4…1!=1。可用下面的递归公式表示:
n!=1(n=0,1)
n·(n-1)!(n>1)
有了例7.7的基础,很容易写出本题的程序:
float fac(int n)
{
float f;
if(n<0){ printf("n<0,dataerror!");f=-1;}
else if(n==0‖n==1) f=1;
else f=fac(n-1)*n;
return(f);
}
main()
{
int n;
float y;
printf("input a integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%15.0f",n,y);
}
运行情况如下:
input a integer number:10
10!= 3628800.