【发布时间】:2011-08-28 02:35:31
【问题描述】:
我使用递归编写了一个函数。在测试它时,结果证明该函数在没有任何明显原因的情况下被终止,而递归仍在运行。
为了测试这一点,我写了一个无限递归。
在我的电脑上,这个函数在大约 2 秒后退出,最后输出大约是 327400。 最后一个数字并不总是相同的。
我使用 Ubuntu Lucid Lynx、GCC 编译器和 Eclipse 作为 IDE。如果有人知道问题出在哪里以及如何阻止程序退出,我会非常高兴。
#include <iostream>
void rek(double x){
std::cout << x << std::endl;
rek(x + 1);
}
int main(int argc, char **argv) {
rek(1);
}
【问题讨论】:
-
恭喜你第一次真正的 Stack Overflow!
-
您好,谢谢您的回答。我预计会是这样。我只是对在这么少的调用后它已经达到堆栈大小感到困惑。
-
顺便说一句,如果您有兴趣,我已经添加了一个答案,该答案通过尾调用优化显示了幕后发生的事情,因此您可以了解为什么不会发生堆栈溢出进行优化。
标签: c++ gcc ubuntu recursion infinite