递归:输出指定文本的原因?

时间:2016-04-06 02:03:16

标签: c++ c++11 recursion

我有一个简单的c ++递归问题。在我提出问题之前,我认为最好显示我的代码。

void message(int times)
{
  if (times > 0)
  {
    cout << "This is a recursive function" << endl;
    message(times - 1);
  }
  cout << "message returning with " << times << " in times << endl;
}

将整数变量次数设置为5。 这是函数

的输出
This is a recursive function
This is a recursive function
This is a recursive function
This is a recursive function
This is a recursive function
Message called with 0 in times
Message called with 1 in times
Message called with 2 in times
Message called with 3 in times
Message called with 4 in times
Message called with 5 in times

我理解为什么会输出“这是一个递归函数”的语句,但是我不明白为什么会输出语句“用0-5次调用的消息”?感谢

3 个答案:

答案 0 :(得分:1)

让我们看一下代码的一小部分:

    message(times - 1);
}
cout << "message returning with " << times << " in times << endl;

在对函数调用message()返回后,您认为会发生什么?你知道当你调用一个函数时,一旦函数调用返回调用者继续执行下一个语句,对吗?

这就是这里发生的事情。因此,例如,当调用此代码时,5会传递times的值,这是您最终看到的消息。

我确定无论你使用什么编译器,你都应该有一个配套的调试工具,让你在执行时一步一行地执行你的程序。如果您花时间学习如何使用调试器,可以将它与程序一起使用,并亲自查看每行的执行情况以及原因。

答案 1 :(得分:1)

如果你模拟调用堆栈,例如调用message(3)

,它会很清楚
message(3)         -> print out "This is a recursive function" and call message(2)
  |-message(2)     -> print out "This is a recursive function" and call message(1)
    |-message(1)   -> print out "This is a recursive function" and call message(0)
      |-message(0) -> print out "message returning with 0 in times" and return to message(1)
    |-message(1)   -> print out "message returning with 1 in times" and return to message(2)
  |-message(2)     -> print out "message returning with 2 in times" and return to message(3)
message(3)         -> print out "message returning with 3 in times" and return

答案 2 :(得分:0)

因为当时间减少到0时,递归将从最新的被调用的一个(时间= 0)返回到最旧的被调用的一个(时间= 5)。 在每次递归返回时,执行if子句,但是消息函数没有结束,它将继续执行代码     cout << "message returning with " << times << " in times << endl;