为什么将递归函数改为显式使用堆栈可以避免堆栈溢出



尽管深度优先搜索可能最好被认为是递归的算法,递归并不是实现它的最佳方式对于许多大型图,上面给出的代码将由于导致堆栈而失败溢流另一种实现方式是替换递归具有显式堆栈的堆栈

我从一个关于深度优先图遍历的页面上读到了这篇文章

我想知道这是否是因为递归函数使用了内存的堆栈部分;但另一方面,显式堆栈是在堆上声明的,因此要大得多。

True,这是由于计算机程序体系结构的限制。为隐式堆栈分配的内存比堆空间更为有限。由于递归的工作方式,堆栈空间将很容易耗尽。这就是为什么显式堆栈的概念通常用于大型图的原因。

此外,通过使用显式堆栈,我们可以使用程序可用的整个内存空间,这也减少了内存不足的可能性。

最新更新