C语言:哪位高手能解释一下下面这个程序,尽可能一步一步详细解说,解释的清楚的话再加分

#include "stdafx.h"
int age(int n)
{
int c;
if(n==1)
c=2;
else c=age(n-1)+2;
return c;
}
main()
{
printf("第5个小朋友的年龄为%d\n",age(5));
}

#include "stdafx.h" /*C语言头文件,表示下面的程序要引用某一个C编译器自带的函数*/
int age(int n) /*定义返回值为整形,输入值为整形n的函数*/
{
int c; /* 定义整数c*/
if(n==1) /* ==是逻辑等的判断*/
c=2; /*如果输入的n等于1则执行c=2*/
else c=age(n-1)+2; /*如果输入的n不等于1则执行c=agen(n-1)+2,这是个循环调用,直到n=1为止,此时c=2*/
return c; /*返回c值*/
}
main()
{
printf("第5个小朋友的年龄为%d\n",age(5)); /* 返回n=5的输出值 */
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-07
这个程序是讲述的是5只小盆友互相蚕食的故事。
age(N)是一种病毒, 得病的第N只小盆友会吃掉第(N-1)只小盆友,然后年龄长2。于是,age(5)就说明了第五只小盆友吃了第四只小盆友,而第四只小盆友是吃了第三只小盆友才出现的,以此类推,直到第一只小盆友。第一只小盆友只有2岁…
第2个回答  2011-12-07
age是一个递归函数,我们先从main入手。,需要输出age(5),此时调用age(5),n=5,则进入c=age(4)+2;又不知道age(4),再次调用age,此时又不知道age(3),需要调用age(2),又不知道age(1),调用age(1),此时c==2,然后再回退回去,age(2)=4,age(3)=6.age(4)=8,age(5)=10;其实这是用的堆栈方面的知识,栈是先后后出的一种数据结构,可能你更糊涂了,就先说这些吧
第3个回答  2011-12-07
换成数学表达式就是:
age(1)=2;
age(n)=age(n-1)+2;
求age(5);
用的是递归的方式;
第4个回答  2011-12-07
#include "stdafx.h" %函数
int age(int n) %定义子函数
{
int c; %子函数自变量定义 C为整数
if(n==1) %条件判断 如果n等于1
c=2; %赋值 c=2
else c=age(n-1)+2; %如果n不等于2执行该程序c=age(n-1)+2
return c; 返回值 c
}
main() %主函数
{
printf("第5个小朋友的年龄为%d\n",age(5)); %输出值
}
第5个回答  2011-12-07
假设在主函数中的调用是age(k),那么在调用age()的过程中会调用age()函数k-1次(不包括主调用),直到k的值为1时,才执行if语句,将c的值赋值为2,(在这之前c的值一直是垃圾数据),然后开始age()函数的返回,调用了k-1次,那自然就要返回k-1次,else语句中c = age(n-1) + 2,就相当与c = c + 2,这样c经过k-1次重复覆盖赋值就是最终主函数的调用结果。例如:k = 5,则调用的结果是10
相似回答