提问者:小点点

递归函数中的C++增量


我用grepper和在寻找递归函数示例时找到了这段代码片段。 我理解了更新的部分,函数如何调用自己-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);

我知道这可能是一个愚蠢的问题,但我只是试图理解为什么“cout<cout<? 将数字递增,仅此而已。


共2个答案

匿名用户

它并不是“增加数字回来”。

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

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

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

匿名用户

考虑一下这个更简单的情况:

void foo(int x) {
     std::cout << x << '\n';
     bar(x-1);
     std::cout << x << '\n';
}

我想您可以预测例如foo(3)的输出:

3
... any output from bar(2) comes here ...
3

现在将bar替换为foo,并为递归添加一个停止,您将得到与printtest相同的结果。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(递归|函数|中|c++|增量)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?