我读到手动维护堆栈有时可以避免递归算法的堆栈溢出,因为手动维护的堆栈在堆中分配,堆的大小比运行时线程堆栈大得多。使用手动维护的堆栈重新实现递归是否还有其他好处?为什么不增加该程序的堆栈大小,这更直接?
答案 0 :(得分:1)
如果只是通过增加堆栈大小就可以解决问题,那几乎可以肯定是正确的解决方案。
如果您的算法很复杂,手动维护的堆栈可能会节省您的时间和空间。您可以在需要时准确分配和释放内存并重用空间,尤其是使用多次或条件递归。如果参数的大小不同,您可以将存储空间仅用于每次调用所需的内容。
如果你做得好,你可以节省维护参数空间的时间... 如果算法恰好发生了浪费时间使用自动堆栈获取多余数据。我不会指望这一点。
重新发明轮子通常是一个坏主意:您必须调试和维护新代码。除非旧车轮是矩形......: - )