C++ C+中的递归示例+;

C++ C+中的递归示例+;,c++,recursion,C++,Recursion,有谁能帮我理解这个程序是如何达到8的,因为它的最终输出,它煎炸了我的大脑 #include <iostream> #include <string> using namespace std; int unknown(int x); int main() { cout << unknown(1); } int unknown(int x) { int result, y = 2; if (x >= 6) return 1;

有谁能帮我理解这个程序是如何达到8的,因为它的最终输出,它煎炸了我的大脑

#include <iostream>
#include <string>
using namespace std;
int unknown(int x);

int main()
{
  cout << unknown(1);
}

int unknown(int x)
{
    int result, y = 2;

    if (x >= 6)
    return 1;
    else
    {
        result = unknown(x + 2) * y;
        return result;
    }
}
#包括
#包括
使用名称空间std;
int未知(int x);
int main()
{
cout=6)
返回1;
其他的
{
结果=未知(x+2)*y;
返回结果;
}
}

调用unknown(1)后的程序执行如下:

未知(1):结果=未知(1+2)*2=未知(3)*2

未知(3):结果=未知(3+2)*2=未知(5)*2

未知(5):结果=未知(5+2)*2=未知(7)*2

未知(7):返回1

所以如果我们从下到上用结果替换未知(x)

未知(7)=1

未知(5)=未知(7)*2=1*2=2

未知(3)=未知(5)*2=2*2=4

未知(1)=未知(3)*2=4*2=8


函数返回8。

一步一步地遍历它。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。@eggo,或者如果调试器对您的大脑来说是一个令人生畏的前景(嘿,我们都在那里)然后添加一些打印语句,仔细思考打印出来的内容。好了,伙计,这是一个很好的解释方式!我现在完全明白了,非常感谢!!