这似乎是一个愚蠢的问题,但我只是不明白这些功能之间的区别。将这两个设置为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);
}
答案 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,但是如果你把它放在一起,就会显示类似的行为。
我希望你能理解我...问候