生产质量VC ++代码的递归

时间:2008-09-01 06:13:42

标签: visual-c++ recursion

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

5 个答案:

答案 0 :(得分:6)

  

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

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

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

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

我发现我的应用程序更容易崩溃,而不是使用100%CPU永远循环并且必须被强行杀死(由于Windows缺少SSH,这是一个错误连接的远程服务器上的正确PITA )

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

如果是,请担心。
如果不是,继续进行更重要的事情。

答案 1 :(得分:2)

是。但从来没有死代码。那太傻了。

答案 2 :(得分:0)

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

也许你希望有一个像最大深度的东西,以确保你没有写一个无限循环。 (如果这在你的例子中有意义的话)

答案 3 :(得分:0)

  

有没有办法确定什么   我会遇到一个堆栈   溢出?

取决于你的深度,以及实际递归的大小。我知道递归是什么意思吗?

答案 4 :(得分:0)

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

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