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

有帮助吗?

解决方案

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

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

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

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

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

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

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

其他提示

是的。但永远不会在死代码中。那太愚蠢了。

当然 - 例如如果你想遍历树结构你还会使用什么?

也许您想要最大深度之类的东西,以确保您不会编写无限循环。(如果这在你的例子中有意义)

是否有办法确定 点,我会遇到堆栈 溢出?

取决于你的深度以及实际递归的大小。我想你明白递归的作用吗?

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top