年龄计算,解释一下例子里的C语言函数

#include <stdio.h>

int age(int n);
main()
{ printf("The 5th's age is %d\n",age(5));
return 0;
}

int age(int n)
{ int c;
if(n==1)
c=10;
else c=age(n-1)+2;
return c;
}
最后的return c,当n=5时,c=age(4)+2,此时(第一次)有返回值吗?当n=1时,c=10了,那前面四次运算的c值哪去了??糊涂了、
请详细解释下,感谢!
返回值c返回到哪里?

这是递归运算,当运行到age(n-1)时,会将n-1的值传递到age函数中再执行此函数,此时age(int n)中的n就等于n-1;下面的依次循环,直到n==1,执行顺序如下:
n=5时,运行到age(4)+2,此时调用age(4),
n=4,运行到age(3)+2,此时调用age(3),
n=3,运行到age(2)+2,此时调用age(2),
n=2,运行到age(1)+2,此时调用age(1),
n=1时,c=10,return c 即返回10.现在将10返回到调用age(2)时的age(1)+2,即c=age(1)+2
c=12,再return 12,返回到调用age(3)时的age(2)+1,c=age(2)+2,此时c=14,····这样一直返回到n=5的情况,此时c=18
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-30
这是递归 前面不返回的 而是递进到age本身里面了~

C==1是递归的出口
也就是当n等于1的时候递归结束
直接展开好了

当n=5时,res=age(4)+2 =age(3)+2+2=age(2)+2+2+2=age(1)+2+2+2+2

age(1)=10 所以res=18; 就这样~
第2个回答  2009-09-30
递归调用!
第一次返回c=age(4)+2。由于不知道age(4),所以重新进入age()函数,得到age(4)=age(3)+2。如此循环下去,最终流程为:
c=age(4)+2
age(4)=age(3)+2;
age(3)=age(2)+2;
age(2)=age(1)+2
age(1)=10
当n=1时结束,最终结果为10+2+2+2+2=18
第3个回答  2009-09-30
事实上今年九月C语言考试考了递归的问题,

这些问题很大可能企业进行提问的问题.

那前面四次运算的c值哪去了??
事实上你求的是age(5)的值,函数计算时把中间值(前面四次的值)放进栈stack中
计算机最后完成运算,就从栈中抽取出age(5)的值返回,,
放入栈中的值从上往下依次是10 12 14 16 18 栈是一种先进后出的数据结构,,所以,,抽取完前面四个数后,才抽出18返回
第4个回答  2009-09-30
这是递归调用的问题,不懂去看书吧,超简单的。
相似回答