C++ 在递归函数中递增

Uni*_*seX 0 c++ console-application

我在寻找递归函数示例时使用 grpper 找到了这个代码片段。我理解递归部分,函数如何调用自身 - 1 直到它到达基本情况,但是,我不理解 else 中的最后一行。只是想弄清楚最后一行如何使数字返回到起始值。代码中没有任何内容将其设置为 +1,而且,随着它返回,它是调用函数本身还是只是我不知道的规则?只是想把我的脑袋围绕在这里的逻辑。

void PrintTest(int test)
{
    if (test < 1)
    {
        return; // Exit condition, known as "base case"
    }
    else
    {
        cout << test << " ";
        PrintTest(test-1);
        cout << test << " ";
    }
}

int main()
{
    int a;
    cout << "Enter a number prefarably between 2 and 9: ";
    cin >> a;
    PrintTest(a);
Run Code Online (Sandbox Code Playgroud)

我知道这可能是一个愚蠢的问题,但只是想了解为什么“cout << test <<”“;” 增加数字备份就是这样。

Ast*_*ngs 5

它不会“增加数字备份”。

在递归步骤之后,处理从停止的地方继续。所以你只是看到“较低”的堆栈帧完成了它们的处理。

这是事件的顺序,从上到下:

PrintTest(3)        PrintTest(2)         PrintTest(1)         PrintTest(0)
===============================================================================
cout << 3 << " ";
PrintTest(3-1);     cout << 2 << " ";
                    PrintTest(2-1);      cout << 1 << " ";
                                         PrintTest(1-1);      return;
                                         cout << 1 << " ";
                    cout << 2 << " ";
cout << 3 << " ";
Run Code Online (Sandbox Code Playgroud)