第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,跳转到本次调用末尾,继续调用的上一次执行,一层一层退出,然后回到主函数中继续执行到结尾。如果没讲清楚,欢迎追问