递归有关问题!

递归问题!!!
问题描述:一共有5个人,编号1、2、3、4、5,5号比4号大两岁,4号比3号大两岁,……,2号比1号大两岁,1号10岁,求5号多少岁?
代码:
#include<stdio.h>
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
printf("%d\n",age(5));

}

这是一个函数的递归调用,调试的时候有一点想不明白:当调用age()函数时,把5传给了n,在else{}里不断调用age()本身,直到n减为1,我想这时候函数age()应该执行完,应该返回到main()中,可是为什么n又继续加1,直到加到5,我想是什么促使n不断加1 ?(之前n减1好理解,因为有c=age(n-1)*2)

------解决方案--------------------
足以说明你确实不理解递归的含义。既然你理解age会返回到main,为什么不理解age返回呢。age(2)调用age(1),那age(1)就返回到age(2)啦,age(2)返回到age(3),一直回溯啊。不知道这么说楼主理解不
------解决方案--------------------
引用:
问题描述:一共有5个人,编号1、2、3、4、5,5号比4号大两岁,4号比3号大两岁,……,2号比1号大两岁,1号10岁,求5号多少岁?
代码:
#include<stdio.h>
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
printf("%d\n",age(5));

}

这是一个函数的递归调用,调试的时候有一点想不明白:当调用age()函数时,把5传给了n,在else{}里不断调用age()本身,直到n减为1,我想这时候函数age()应该执行完,应该返回到main()中,可是为什么n又继续加1,直到加到5,我想是什么促使n不断加1 ?(之前n减1好理解,因为有c=age(n-1)*2)


错了,n压根就没有变过,你仔细看你的程序,有任何对n赋值的语句吗?没有

你看到n减小,是因为那根本就不是同一个n

一开始,你调用age(5),这时候age的参数n有了值5;
接下去到c=age(n-1)+2,产生了一次新的age调用,注意原来的age调用并没有结束,还停在那里等待c的返回值,这个新的age调用得到一个参数4,这个4赋给谁了?是赋给了新age的参数n,而不是原来那个n!原来那个n还是5没有变,这时候是有2个n,一个5,一个4,而因为此刻正处于新的age函数内部,所以你在调试窗口中看到的n,是那个4
接下去以此类推,一直到1的时候,这时候是同时存在着5层age调用,一层套一层,它们都没有结束,都在等着各自的c得到返回值
接下去最里面那一层age返回了10,调用结束,所以最里面那个n(值为1)作为局部变量就销毁了,我们回到了第4层age,所以你又重新见到了第4层的那个n(值为2),接着第4层age也返回了,于是这个n也销毁,你又看到了第3层的n(值为3),在你看来就好像n在不断+1一样