简单递归
1.递归本质(为什么可以递归)
可以递归的原因:
函数的每一次调用,都会在函数栈开辟新的内存,所以递归的本质就是栈
2.尾递归
形式:
<返回值类型> f(形参列表){
if(结束条件)
return 返回值;
/*
...
...
操作
*/
f(实参);
}
将操作放在递归调用之后另一种理解:先操作,再下一次压栈
举个例子:
void f(int x) {
if (x == 0)
return;
cout << x << endl;//这里用输出代替操作
f(x / 10);
return;
}
例如,调用f(1234):1234压栈(压栈方向,向上,所以下面的图从最后一行开始向上看)
0 | 返回条件满足; 退栈 |
1 | 输出1; f(1/10):0压栈 |
12 | 输出12; f(12/10):1压栈 |
123 | 输出123; f(123/10):12压栈 |