2015-03-19 101 views
0

儘管深度優先搜索最好被認爲是遞歸算法,但遞歸併不是實現它的最佳方式。事實上,上面給出的代碼將通過導致堆棧溢出而導致許多大圖失敗。另一種實現是一個明確的堆棧,以取代遞歸 堆棧爲什麼將遞歸函數改爲顯式使用堆棧可以避免堆棧溢出?

我從大約深度優先遍歷中頁面閱讀本here

因爲遞歸函數使用堆棧的一部分,我想如果這是的記憶;但另一方面,顯式堆棧在堆上聲明的更大。

回答

1

確實,這是由於計算機程序的架構造成的限制。分配給隱式堆棧的內存比堆空間更有限。由於遞歸的方式 - 堆棧空間將很容易耗盡。這就是爲什麼顯式堆棧的概念通常用於大圖的原因。

另外通過使用顯式堆棧,我們可以使用我們的程序可用的整個內存空間 - 這也減少了內存不足的可能性