【问题标题】:c++ confusion on outputsc++ 混淆输出
【发布时间】:2014-12-06 03:59:37
【问题描述】:

这似乎是一个愚蠢的问题,但我只是不明白这些功能之间的区别。将这两个都设置为 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);

}

【问题讨论】:

  • 您可能想检查递归的工作原理。更好地理解。
  • @learningToCode 你的意思是基础知识?我错过了一些基本的东西吗?
  • 使用调试器逐行执行代码。它将帮助您更好地了解正在发生的事情。
  • 哦,所以递归函数会一直运行,直到该值恢复为该整数的原始值。我想我明白了。谢谢

标签: c++ loops output


【解决方案1】:

嗯...在这里付款:

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

当我们有一个作为 xxx(N+2) 的递归调用时,当前的“迭代”被堆叠以启动新函数。那么当函数结束时,之前的迭代就会正常进行。

因此,当达到最大值 (6) 时,此迭代将结束并继续前一个“迭代”的 cout...迭代将在上一次迭代中以 N 的 cout 继续结束,即 2 等等......

在第二个函数注释中,xxy递归调用后面没有cout,但如果你把它放了,就会显示类似的行为。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2017-03-11
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多