递归如何工作并打印这些递增的递减数字

时间:2015-03-08 12:08:22

标签: c++ recursion

代码:

#include <iostream>
using namespace std;
int sub() {
    int a;
    a=5;
    return a;
     }
void fact(int x) {
    if(x>=1)
    {
         cout<<"counter:"<<x<<endl;
        fact(x-1);
        cout<<"after emptying stack"<<x<<endl;         
    }
    cout<<"check"<<endl;
}

int main() {
    fact(sub());
}

输出:

counter:3
counter:2
counter:1
check
after emptying stack1
check
after emptying stack2
check
after emptying stack3
check

我已经调试了程序,但是在if语句之后,它应该停止并返回main但是在完成之后它再次返回cout并且程序是如何打印的if语句终止后?请解释(SCREENSHOT

1 个答案:

答案 0 :(得分:1)

首先简化你的例子:你的主要功能基本上是调用fact(5)(因为sub总是返回5)。

这里解释了如何完成递归调用:

-- 5 >= 1 is true -- 
fact(5):
    counter:\n fact(4) after emptying stack 5\ncheck\n
-- 4 >= 1 is true -- 
fact(4):
    counter:\n fact(3) after emptying stack 4\ncheck\n
-- 3 >= 1 is true -- 
fact(3):
    counter:\n fact(2) after emptying stack 3\ncheck\n
-- 2 >= 1 is true -- 
fact(2): 
    counter:\n fact(1) after emptying stack 2\ncheck\n
-- 1 >= 1 is true -- 
fact(1):
    counter:\n fact(0) after emptying stack 1\ncheck\n
-- 0 >= 1 is false -- 
fact(0):
    check\n

现在从底部到顶部替换来电:

fact(1):
    counter:\n check\n after emptying stack 1\ncheck\n
fact(2): 
    counter:\n counter:\n check after emptying stack 1\ncheck\n after emptying stack 2\n
fact(3): 
    counter:\n -- above here -- after emptying stack 3\ncheck\n
...