递归函数输出的解释

问题描述 投票:0回答:2

对于以下代码:

#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

我理解了计算阶乘时递归函数背后的基本思想。但是,我无法理解这个输出。谷歌搜索和教科书没有帮助。请有人能为初学者详细解释上述输出。

谢谢

c++ recursion
2个回答
0
投票
---2
---2
--3
---2
---2
--3
-4
---2
---2
--3
---2
---2
--3
-4
5

0
投票

已经有几次有帮助的是执行以下操作......

你看一下没有递归的函数。为此,我们将递归调用替换为对其他未定义函数的调用:

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;
 }

没有任何输出。

© www.soinside.com 2019 - 2024. All rights reserved.