以生产质量的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缓冲区?
如果是,请担心。
如果否,则继续进行更重要的事情。
回答
递归对于遍历文件结构(如文件夹/目录)几乎是必不可少的。
如果使用递归,遍历树状结构非常容易。