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

时间:2015-03-19 04:55:13

标签: memory recursion

  

尽管深度优先搜索最好被认为是递归的   算法,递归不是实现它的最佳方式。的确如此   通过引起堆栈,上面给出的代码将因许多大图而失败   溢出。另一种实现方式是替换递归   堆栈与显式堆栈

我是从有关深度优先图遍历here

的页面中读到的

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

1 个答案:

答案 0 :(得分:1)

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

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