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

时间:2020-03-05 18:45:50  来源:igfitidea点击:

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

解决方案

回答

是的。但是永远不要死代码。那太傻了。

回答

当然可以如果要遍历树结构,还需要使用什么?

也许我们希望具有最大深度之类的内容,以确保我们没有编写无限循环。 (如果在示例中这样说得通)

回答

Is there a way to determine at what
  point I would encounter a stack
  overflow?

取决于我们走的深度以及实际递归的大小。我认为我们了解递归是什么?

回答

Is there a way to determine at what point I would encounter a stack overflow?

并不真地。但是,当我们耗尽堆栈空间时会发生堆栈溢出。

  • 初始堆栈大小可以通过编程更改,并且可以默认设置为不同的值,具体取决于OS /编译器/等
  • 其中的多少已用完取决于应用程序(以及应用程序使用的库)以前做过的事情-这通常无法预测
  • 每个调用需要多少堆栈取决于我们在函数中执行的操作。如果仅在堆栈上分配说1的整数,则可能可以递归大量的时间,但是如果要在堆栈上分配200k的缓冲区,则不会那么多。

我碰过的唯一一次是无限循环,或者使用上述200k缓冲区。

我发现我的应用程序崩溃比直接使用100%CPU永远循环并不得不被强制终止更为可取(这是远程服务器上正确的PITA,因为Windows缺少SSH,连接不良)

一个粗略的指导原则:我们是否认为递归函数可能连续调用自身超过10,000次?还是我们在做一些愚蠢的事情,例如在堆栈上分配200k缓冲区?

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

回答

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

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