1

在编写生产质量的 VC++ 代码时,是否可以使用递归?为什么或者为什么不?

4

5 回答 5

6

有没有办法确定我会在什么时候遇到堆栈溢出?

并不真地。当您耗尽堆栈空间时会发生堆栈溢出 - 但是......

  • 初始堆栈大小可以通过编程方式更改,并且可能默认为不同的数量,具体取决于您的操作系统/编译器/等
  • 有多少已经用完取决于您的应用程序(以及您的应用程序使用的库)之前所做的事情——这通常是无法预测的
  • 每次调用需要多少堆栈取决于您在函数中执行的操作。如果您只在堆栈上分配 1 个整数,您可能能够递归大量的时间,但如果您在堆栈上分配 200k 的缓冲区,则不是那么多。

我遇到的唯一一次是无限循环,或者使用前面提到的 200k 缓冲区。

我发现我的应用程序崩溃要好得多,而不是它使用 100% CPU 永远循环并且必须被强制终止(这是远程服务器上的正确 PITA,因为 Windows 缺少 SSH,连接不良)

粗略的指导:你认为你的递归函数可能会连续调用自己超过 10,000 次吗?或者你在做一些愚蠢的事情,比如在堆栈上分配 200k 缓冲区?

如果是,请担心。
如果没有,继续做更重要的事情。

于 2008-09-01T06:58:57.333 回答
2

是的。但从不在死代码中。那将是愚蠢的。

于 2008-09-01T06:15:28.467 回答
0

当然——例如,如果您想遍历树结构,您还会使用什么?

也许您希望拥有最大深度之类的东西,以确保您没有编写无限循环。(如果这在您的示例中有意义)

于 2008-09-01T06:17:54.127 回答
0

有没有办法确定我会在什么时候遇到堆栈溢出?

取决于你走多远,以及实际递归有多大。我认为您了解递归的作用吗?

于 2008-09-01T06:54:29.967 回答
0

递归对于遍历文件夹/目录等文件结构几乎是必不可少的。

如果使用递归,遍历树状结构非常容易。

于 2008-09-01T06:59:14.040 回答