这个C++程序的递归调用执行过程,前面输出理解,就是从if的return之后就不理解怎么会输出那些,求指教

void g(int n)
{
cout<<"函数开始:n="<< n <<endl;
if(n==0)
return;
g(n/2);
cout<<"函数结束:n="<< n <<endl;
}

int main()
{
g(10);
return 0;
}

递归的意思就是用相同的方法去处理一系列问题(这些问题具有完全相同的处理方法),直到遇到结束点。这有点和循环相似

void g(int n)
{
cout<<"函数开始:n="<< n <<endl; //1.输出当前的n值
if(n==0) return; //2.如果n为0,问题结束,返回调用者
g(n/2); //3.用相同的方法,处理n/2的问题
cout<<"函数结束:n="<< n <<endl; //4.处理完n/2后输出n值 这里和1中输出的n是相同的
}
程序在执行过程中,总是在按上面的1,2,3,4步在进行n值的处理,只是每次的n值不同。
因此,解释上面的运行过程:
n=10时,先输出:函数开始:n=10,然后处理g(5); 处理完成后,再输出函数结束:n=10
n=5时,先输出:函数开始:n=5,然后处理g(2); 处理完成后,再输出函数结束:n=5
n=2时,先输出:函数开始:n=2,然后处理g(1); 处理完成后,再输出函数结束:n=2
n=1时,先输出:函数开始:n=1,然后处理g(0); 处理完成后,再输出函数结束:n=1
n=0时,先输出:函数开始:n=0 ,因为n=0所以结束返回 (回到n=1的)环节
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-08
第一句依次输出10 5 2 1 0
n==0时就return了直接结束函数
此后返回的执行点是上一次对g(n/2)的调用,这时n=1,所以输出第二句的1
依此类推

你把递归调用理解成对同名函数的嵌套调用,就容易理解一些
f1() { a1 f2(){ a2 f3(){ a3 f4() b3} b2} b1}
f都是同一个函数,a是递归调用之前的语句,b是之后的
第2个回答  2013-03-08
void g(int n)
{
cout<<"函数开始:n="<< n <<endl;

if(n==0) //整个递归函数的出口。
return;

g(n/2); //如果函数没有从上面的出口出去,那么继续调用自身。
cout<<"函数结束:n="<< n <<endl; //每次调用的时候n都会改变,所以每次调用,这里都会输出一次n
}

int main()
{
g(10);
return 0;
}
第3个回答  2013-03-08
就是自己调用自己,直到满足条件,则return。不然就一直循环
第4个回答  2013-03-08
这个函数是一个每次除以二(取整)的递归函数,每次将n的值输出过后,判断n是否为0,如果n为0,跳转到本次调用末尾,继续调用的上一次执行,一层一层退出,然后回到主函数中继续执行到结尾。如果没讲清楚,欢迎追问
相似回答