c++递归调用 理解

来源:百度知道 编辑:UC知道 时间:2024/07/07 10:23:11
#include <iostream>
using namespace std;
int age(int);
int main()
{
cout<<age(5)<<endl;
return 0;
}
int age(int n)
{
int c;
if(n==1) c=10;
else c=age(n-1)+2;
return c;
}

我想问下这段要怎么理解
int age(int n)
{
int c;
if(n==1) c=10;
else c=age(n-1)+2;//age(5),我想问这里是怎么理解,
return c;
}
系统是按什么顺序来执行age(5)的。是从n=5,c=age(5-1)+2;
n=4,c=age(4-1)+2;
n=3,c=age(3-1)+2;
n=2,c=age(2-1)+2;
n=1,c=10;
还是从n=1,c=10;
n=2,c=age(2-1)+2;
n=3,c=age(3-1)+2;
n=4,c=age(4-1)+2;
n=5,c=age(5-1)+2;
能理解成是n=1,c=10,把C返回到age,
后面n=2,c=age(2-1)+2,c=调用上面的aeg=10+2;在把c=12的值返回到age.
后面n=3,c=age(3-1)+2,c=调用上面的aeg=12+2;在把c=14的值返回到age.
后面n=4,c=age(4-1)+2,c=调用上面的aeg=14+2;在把c=16的值返回到age.
后面n=5,c=age(5-1)+2,c=调用上面的aeg=16+2;在把c=18的值返回到age.
age在被main调用输出18?

能按我这样理解吗,如果是的话,c=age(n-1)+2,不是可以改成c=age+2吗,请指出我做在哪,谢谢
是错在哪,不是做在哪,

结果是对的,分析过程也都对。
只是不能改成 c=age+s;
这说明你对C语言的语法还不是很熟悉。
在你的程序中age被定义成函数,函数出现的地候一定要带有括号的。

单独出现的age表示的是这个函数在内存中的地址,即是一函数指针常量。
那age+2就是毫无意义的表达式了。

而且你的程序中age函数带有一个整型的参数,age 这样的形式,C编译器根本不知道要传什么参数给age

递归只是利用函数调用的机理实现的循环。所有递归都能用循环写出来。特别是这里的单线递归,相比循环一无是处,当然这个只是一个为了说明递归的例程,不用深究。

“c=age(n-1)+2,不是可以改成c=age+2”age可是函数啊。
这个程序其实就是实现了10 + 2(N - 1)那么个东西

理解这种东西可以尝试当自己是计算机自己去执行这个程序。