【问题标题】:Recursion in production-quality VC++ Code生产质量的 VC++ 代码中的递归
【发布时间】:2010-09-07 10:35:39
【问题描述】:

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

【问题讨论】:

    标签: visual-c++ recursion


    【解决方案1】:

    是的。但从不在死代码中。那太傻了。

    【讨论】:

    • 它还没死!它渴望峡湾。
    • @Aardvark - 你不能投票给 cmets 真是太糟糕了;-)
    【解决方案2】:

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

    也许您希望有一个最大深度之类的东西,以确保您没有编写无限循环。 (如果这在您的示例中有意义)

    【讨论】:

      【解决方案3】:

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

      取决于你走多远,以及实际递归有多大。我想你明白递归是做什么的吗?

      【讨论】:

        【解决方案4】:

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

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

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

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

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-19
            • 1970-01-01
            • 2019-05-14
            • 2021-01-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-09
            相关资源
            最近更新 更多