c ++对输出的困惑

时间:2014-12-06 03:59:38

标签: c++ loops output

这似乎是一个愚蠢的问题,但我只是不明白这些功能之间的区别。将这两个设置为0,为什么xxx()打印0,2,4,6,4,2,0和xxy()打印常规0,1,2,3,4,5。我问的问题是,为什么xxx()在达到允许的最大值后会减少' 6'

void xxx(int N) 
{
    cout << N;
    if (N < 5) 
    {
        xxx(N + 2);
        cout << N;;
    }
}
void xxy(int N) 
{
    cout << N;
    if (N < 5)
        xxy(N + 1);
}

int main()
{
   xxx(0);
   xxy(0);

}

1 个答案:

答案 0 :(得分:0)

嗯......在这里支付atención:

cout << N;
if (N < 5) 
{
    xxx(N + 2);
    cout << N;
}

当我们将递归调用作为xxx(N + 2)时,当前的“迭代”被堆叠以启动新函数。然后当函数结束时,前一次迭代正常进行。

因此,当达到最大值(6)时,此迭代将以前一次“迭代”的cout结束...在此前一次迭代中,N值为4 ...将显示此值,此值迭代将在上一次迭代中继续使用N的cout,这将是2,依此类推......

在第二个函数中注意到在xxy递归调用之后没有cout,但是如果你把它放在一起,就会显示类似的行为。

我希望你能理解我...问候