2015-03-19 100 views
0

尽管深度优先搜索最好被认为是递归算法,但递归并不是实现它的最佳方式。事实上,上面给出的代码将通过导致堆栈溢出而导致许多大图失败。另一种实现是一个明确的堆栈,以取代递归 堆栈为什么将递归函数改为显式使用堆栈可以避免堆栈溢出?

我从大约深度优先遍历中页面阅读本here

因为递归函数使用堆栈的一部分,我想如果这是的记忆;但另一方面,显式堆栈在堆上声明的更大。

回答

1

确实,这是由于计算机程序的架构造成的限制。分配给隐式堆栈的内存比堆空间更有限。由于递归的方式 - 堆栈空间将很容易耗尽。这就是为什么显式堆栈的概念通常用于大图的原因。

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