请教C语言老师,详细解释一下递归调用:

学过谭浩强老师的那本《C程序设计》之后,发现最不好理解的地方之一就是函数中的“递归调用”,或者说对于有关递归调用的程序的真实执行情况一点都不清楚,不知道它的执行情况是怎么样的。比如这样的一道问题:用递归的方法求n!,源程序是这样的:
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);}
main()
{int n;
float y;
printf("input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%10.0f",n,y);}

请详细说明一下程序的执行过程(每一步的,尤其是
else f=fac(n-1)*n感觉最不好理解它的执行情况)

分析一下fac()是如何执行的。假设读入的n=3。
首先, main()函数中的y=fac(3),引起第1次函数调用。进入函数后实参n=3,应执行计算3*fac(2)
为了计算fac(2),引起对fac()函数的第2次调用(递归调用),重新进入函数fac(),实参n=2,应执行计算2*fac(1)。
为了计算fac(1),引起对函数fac()的第3次调用(递归调用),重新进入函数,实参n=1,应执行计算1*fac(0)。
为了计算叫fac(0),引起对函数fac()的第4次调用(递归调用),重新进入函数,实参n=0,此时执行f=1和return(f),完成第4次调用,回送结果fac(0)=1,返回到第3次调用层。
计算执行f=1*fac(0)和return(f),完成第3次调用,回送结果fac(1)=1 返回到第2次调用层。
计算执行f=2*fac(1)和return(f)。完成第2次调用,回送结果fac(2)=2,返回到第1次调用层。
计算执行f=3*fac(2)和return(f).完成第1次调用,回送结果fac(3)=6,返回到土函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-02-01
把递归当循环理解容易一些ba

相关了解……

你可能感兴趣的内容

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