回覆列表
  • 1 # 蔓莓愛素描

    幾天寫的一段程式碼就出現了這個問題。大概結構是這樣的:A(){ if(){}//遞迴終止條件 else(){ for(){ A();//這裡進行了一個遞迴,當for迴圈次數過多,而且遞迴終止條件難以達成的時候,棧記憶體就會溢位 } }} ------------- 如果我回答對你有幫助,請關注我一下。或有其他問題也可以關注我,給我發私信

  • 2 # 旅行的Java

    要麼是你的遞迴函式寫的問題,終止條件。要麼就是你呼叫的次數實在太多。遞迴函式就有導致記憶體溢位的可能,函式呼叫,就是入棧,出棧過程,呼叫次數太多,導致入棧太深,記憶體一直不釋放,就GG了,慎用遞迴。

  • 3 # 程式設計師Bob

    遞迴每進入一次方法,會將上個方法的資料壓入棧中以便將來恢復繼續執行。

    迴圈每次執行的時候,臨時變數都失效了,只有少量的全域性變數。

    你的這個問題的原因是因為遞迴次數太多,導致棧記憶體耗盡。

  • 4 # 品碼師

    採用遞迴必須要有遞迴終止條件,為了防止棧溢位,遞迴深度最好不要太大,否則即使有正確的終止條件遞迴也會造成棧溢位。遞迴最常見的情形是二叉樹遍歷,程式碼簡單快捷。

  • 5 # 網路圈

    我們知道,在程式設計中如果想讓某個業務重複執行,一般有兩種實現方式,分別是:遞迴和迴圈。在實際編碼過程中,我們並不建議使用遞迴,反而是建議使用迴圈,這是為什麼呢?

    遞迴不當會導致記憶體溢位

    其實不單單是Java,任何一款程式語言,如果遞迴寫法不對,那就可能導致記憶體溢位!

    學過Java的朋友肯定或多或少都聽說和了解過棧記憶體和堆記憶體,程式在執行時,電腦作業系統會給每個程序都分配有堆記憶體、棧記憶體,所分配的堆疊記憶體都是有上限的,一旦超過了這個上限就會導致記憶體溢位現象。

    為什麼遞迴操作容易導致記憶體溢位呢?原因主要有以下幾點:

    遞迴方法體內,如果終止遞迴的條件寫錯了,那可能會導致無限遞迴,最終導致記憶體溢位;

    即使遞迴方法及退出遞迴條件都是正常的,但若遞迴深度過深(遞迴次數過多),也會導致棧記憶體溢位!因為棧的出入規則是先入後出(先入棧的最後再出來),如果遞迴次數過多就會導致只入棧不出棧,最終棧記憶體溢位。

    遞迴改迴圈可以降低記憶體溢位的可能

    注意,遞迴寫法改成迴圈寫法可以降低記憶體溢位的風險,但這不是絕對的,如果迴圈寫成了死迴圈一樣會導致記憶體溢位。

    遞迴寫法改成迴圈寫法的好處是,不會在短時間內出現棧的只入不出現象,所以可以規避棧記憶體溢位現象。

  • 中秋節和大豐收的關聯?
  • 為什麼感覺現在的武俠片拍出來的是“神劇”,特效特別多,但是拍不出那種俠義的精氣神了呢?