我有一个简单的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次调用的消息”?感谢
答案 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;
。