用递归方法求n!,程序如下:求每一句程序的说明,谢谢!

# include<stdio.h>
void main()
{
float fac(int n);
int n;
float y;
printf(“input an integer number:”);
scanf(“%d”,&n);
y=fac(n);
printf(“%d!=%10.0\n”,n,y);
}
float fac(int n)
{
float f;
if(n<0)
{
printf(“n<0,dataerror!”);
}
else
if(n= =0| |n= =1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
运行结果如下:
input an integer number:10
10!= └┘└┘3628800.

主函数就不用说了吧,就是让你输入一个数字然后调用fac方法,最后输出结果。
所谓递归函数,就是函数自身不断的调用自己,在某个条件成立的时候跳出。一般都是以计算阶乘作为例子,你这个程序实现的也是计算阶乘的功能。
if(n<0)
{
printf(“n<0,dataerror!”);
}
以上这句基本没用,就是对你所输入的数字进行判断,要求你所输入的数字大于0才计算阶乘,也就是才执行下面的部分。
else
if(n= =0| |n= =1)
f=1;
这里很重要,是递归函数退出的条件。
else
f=fac(n-1)*n;
这里就是所谓的自己调用自己 fac(n-1)是调用自己,*n是为了计算f的值。
我们假设你在主函数里面输入3,即y=fac(3);
那么fac函数执行如下:
n=3时进入函数,f=fac(2)*3;此时程序会进入fac(2),传入的参数n变成了2,
但是并不执行return(f),return(f)要等fac(2)执行完成之后才能执行。
fac(2)中f=fac(2-1)*2,即f=fac(1)*2,此时程序会进入fac(1),传入的参数n变成了1,
但是并不执行return(f),return(f)要等fac(1)执行完成之后才能执行。
fac(1)中,符合 if(n= =0| |n= =1),所以f=1.
fac(1)将结果f return给fac(2),fac(2)中的f=1*2=2;
fac(2)再将自己的f return给fac(3),fac(3)中的f=2*3=6;
这样y=fac(3)=6.
这个过程说起来很麻烦,可能我表达的也不是很清楚,你也很难理解。
建议你自己把这个程序加断点跟进,一步一步看一下程序的执行过程。
调试是学程序的最好方法
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-23
#include<stdio.h>
void main()
{
float fac(int n);//函数声明
int n; //定义一个int型n
float y;
printf("input an integer number:"); //输出提示
scanf("%d",&n); //读入整型数n
y=fac(n); //调用fac函数,求出n!,赋值给y
printf("%d!=%10.0\n",n,y);//打印输出
}
float fac(int n) //函数定义
{
float f;
if(n<0) //如果n小于0,输出错误提示
{
printf("n<0,dataerror!");
}
else if(n= =0| |n= =1) //如果n=0或1,返回1,结束递归的关键
f=1;
else
f=fac(n-1)*n; //n>1的继续递归调用fac函数乘以n
return(f);
}
如:n=4
第一次:fac(3)*4
第二次:fac(2)*3*4
第三次:fac(1)*2*3*4 也就是1*2*3*4

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网