生产质量的 VC++ 代码中的递归
Posted
技术标签:
【中文标题】生产质量的 VC++ 代码中的递归【英文标题】:Recursion in production-quality VC++ Code 【发布时间】:2010-09-07 10:35:39 【问题描述】:在编写生产质量的 VC++ 代码时,是否可以使用递归?为什么或为什么不?
【问题讨论】:
【参考方案1】:是的。但从不在死代码中。那太傻了。
【讨论】:
它还没死!它渴望峡湾。 @Aardvark - 你不能投票给 cmets 真是太糟糕了;-)【参考方案2】:当然 - 例如如果您想遍历树结构,您还会使用什么?
也许您希望有一个最大深度之类的东西,以确保您没有编写无限循环。 (如果这在您的示例中有意义)
【讨论】:
【参考方案3】:有没有办法确定什么 点我会遇到一个堆栈 溢出?
取决于你走多远,以及实际递归有多大。我想你明白递归是做什么的吗?
【讨论】:
【参考方案4】:有没有办法确定我会在什么时候遇到堆栈溢出?
不是真的。当您耗尽堆栈空间时会发生堆栈溢出 - 但是...
初始堆栈大小可以通过编程方式更改,并且可能会根据您的操作系统/编译器/等默认为不同的大小 已经用完多少取决于您的应用(以及您的应用使用的库)之前所做的 - 这通常是无法预测的 每次调用需要多少堆栈取决于您在函数中执行的操作。如果您只在堆栈上分配 1 个整数,您可能能够递归大量的时间,但如果您在堆栈上分配 200k 的缓冲区,则不会这么多。我遇到的唯一一次是无限循环,或者使用前面提到的 200k 缓冲区。
我发现我的应用程序崩溃更可取,而不是它使用 100% CPU 永远循环并且必须被强制终止(这是远程服务器上的正确 PITA,因为 Windows 缺少 SSH,连接不良)
粗略的指导:您认为您的递归函数可能会连续调用自己超过 10,000 次吗?或者你在做一些愚蠢的事情,比如在堆栈上分配 200k 缓冲区?
如果是,请放心。 如果没有,请继续做更重要的事情。
【讨论】:
【参考方案5】:递归对于遍历文件夹/目录等文件结构几乎是必不可少的。
如果使用递归,遍历树状结构非常容易。
【讨论】:
以上是关于生产质量的 VC++ 代码中的递归的主要内容,如果未能解决你的问题,请参考以下文章