【问题标题】:Benefit of reimplementing recursion with manually maintained stack?使用手动维护的堆栈重新实现递归的好处?
【发布时间】:2017-01-02 15:56:45
【问题描述】:

我读到手动维护堆栈有时可以避免递归算法的堆栈溢出,因为手动维护的堆栈是在堆中分配的,它比运行时线程堆栈的大小要大得多。使用手动维护的堆栈重新实现递归还有其他好处吗?为什么不直接增加该程序的堆栈大小,这样更直接?

【问题讨论】:

    标签: recursion stack stack-overflow


    【解决方案1】:

    如果您可以简单地通过增加堆栈大小来解决您的问题,那几乎肯定是正确的解决方案。

    如果您的算法很复杂,手动维护的堆栈可能可以节省您的时间和空间。您可以在需要时准确地分配和释放内存并重用空间,尤其是在多重或条件递归的情况下。如果参数大小不一,您可以只保留每次调用所需的存储空间。

    如果你做得好,你可能还会节省维护参数空间的时间...... 如果算法碰巧浪费时间来获取多余的数据一个自动堆栈。我不会指望这个。

    重新发明轮子通常是个坏主意:您必须调试和维护新代码。除非旧轮子是矩形... :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2014-03-14
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2015-12-17
      • 2018-03-26
      相关资源
      最近更新 更多