1. 程式人生 > >遞迴導致記憶體溢位

遞迴導致記憶體溢位

遞迴在分析問題的時候很方便,但是在寫實現的時候開銷卻很大,尤其是當遞迴層數太深的時候,記憶體就會溢位

java裡面JVM的機制在呼叫函式的時候任然是進棧和出棧,所以極易導致棧記憶體溢位,錯誤型別 幾天寫的一段程式碼就出現了這個問題。 大概結構是這樣的: A(){     if(){}//遞迴終止條件     else(){         for(){             A();//這裡進行了一個遞迴,當for迴圈次數過多,而且遞迴終止條件難以達成的時候,棧記憶體就會溢位         }     }
} 摸索了很久(確實是摸索,網上的資料都不太合適,基本上原因知道了,但是解決方法都是說修改程式碼,但是具體怎麼改沒有具體的例子),就這個結構的來說,換成下面的樣子就可以 A(){   if(){}   else{     B()   } } B(){   for(){     A()   } } 比較兩種寫法,第一種寫法不斷的遞迴,函式巢狀層數過多最後導致棧記憶體溢位,而第二種寫法將迴圈的部分放到了另外一個函式,進入B的時候A已經結束了,其佔用的棧記憶體可以得到釋放,所以沒有過多的函式巢狀。 具體全面的遞迴優化請google,這裡只是我遇到的一種情況和自己的解決方法。共勉