C语言递归进栈后何时出栈?请大神详细点回答?

如题所述

当最后一次递归调用结束的时候,开始依次出栈,
出栈从最后那次调用开始,直到第一次调用结束。追问

有的递归有return语句,那出栈和return有关么?还有出栈后的数据一般给谁了

追答

#include
int fun(int num){
if(num==0) return;
return num+fun(num-1);
}
int main(){
int a = 3;
int sum;
sum = fun(a);
printf("%d\n",sum);
return 0;
}
看上面这个例子
return num+fun(num-1);
开始一直调用,一直到num==0,然后开始出栈
其实就等于 return num+fun(num-1) => num+num-1+fun(num-2) => num+num-1+num-2+fun(num-3) 然后num-3 == 0 开始出栈num+num-1+num-2+0 => num+num-1+1 => num+3
=>7. return 7;
所以说出栈个return有关,出栈数据因情况而定,这里是返回主函数了

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-26
递归是有条件的。满足了条件,才调用自身函数,递归。否则就不递归了(就是开始回退了).
给一个阶乘例子你吧
int fun(int n)
{
if( n>0 ) //当满足n大于0这个条件时,才调用fun。递归下去
return n*fun(n-1);

return 1;
}本回答被网友采纳
相似回答