代码:
#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)
答案 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
...