C语言问题:以下是一个递归函数的例子,请帮我分析一下,这段程序是怎么运行的?值的变化是怎么样的?

#include<stdio.h>
void main()
{
int diecheng(int num);
printf("%d",diecheng(5));
}
int diecheng(int num)
{
int result;
if(num==0)
result=1;
else
result=num*diecheng(num-1);
return result;
}

从主函数开始运行,遇到调用函数时,直接跳到下面的函数定义中运行,然后把返回值带到主函数,继续运行主函数下面的部分。
#include<stdio.h>
void main()
{
int diecheng(int num); \\声明函数
printf("%d",diecheng(5)); \\diecheng(5)即为调用此函数,实参为5
}
int diecheng(int num) \\定义函数
{
int result;
if(num==0)
result=1;
else
result=num*diecheng(num-1);
\\因为实参为5,所以运行else下面的,result=5*(5-1)即为20
return result; \\返回result的值(即20)到主函数的printf语句中,从而打印出来
}追问

这个是5!=120;

追答

呃 实在不好意思!
result=num*diecheng(num-1);这句就是函数递归调用,即diecheng这个函数调用了自己本身。
最初传递的实参为5,到这步的时候调用了diecheng(4),此时result==5*diecheng(4),又返回到定义的函数继续运行,又调用了diecheng(3),此时result==4*diecheng(3),循环调用,最后一次调用了diecheng(0),此时终于得出个数来,result==1。此后依次往回带,返回值1带到diecheng(1),result==2*1,再带到diecheng(2),result==3*2*1,最终带到diecheng(4),result=5*4*3*2*1。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-12
进入主函数首先声明diecheng函数然后打印diecheng(5),进入diecheng函数,num=5,所以result5=5*diecheng(4),进入diecheng(4)result4=4*diecheng(3)进入diecheng(3) result2=3*diecheng(2) 进入diecheng(2) result2=2*diecheng(1),进入diecheng(1) result1=1*diecheng(0),diecheng(0)=1,result1=1;result2=2;result3=6;result4=24;result5=120,所以结果是120
相似回答