对于以下代码:
#include <bits/stdc++.h>
using namespace std;
void g(int n){
if(n==1) return;
g(n-1);
g(n-1);
cout<<n<<endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
g(5);
}
我得到输出: 2 2 3 2 2 3 4 2 2 3 2 2 3 4 5
我理解了计算阶乘时递归函数背后的基本思想。但是,我无法理解这个输出。谷歌搜索和教科书没有帮助。请有人能为初学者详细解释上述输出。
谢谢
---2
---2
--3
---2
---2
--3
-4
---2
---2
--3
---2
---2
--3
-4
5
已经有几次有帮助的是执行以下操作......
你看一下没有递归的函数。为此,我们将递归调用替换为对其他未定义函数的调用:
void g(int n){
if(n==1) return;
do_something1(n-1);
do_something2(n-1);
cout<<n<<endl;
}
现在考虑一下它的输出是什么:
... any output produced by do_something1(n-1);
... any output produced by do_something2(n-1);
n
现在您可以思考一下,然后深入挖掘并尝试理解前两行总结的输出是什么。
一种类似但不同的方法是分解参数:
void g5(){
g4();
g4();
cout<<5<<endl;
}
与上面相同,我们知道这个的输出:
... output of g4()
... output of g4()
5
我将让您用笔和纸继续这个练习,直到您到达
void g1() {
return;
}
没有任何输出。