java 遞迴方法
阿新 • • 發佈:2020-09-01
1.什麼是遞迴?
方法自己呼叫自己
2.當遞迴時程式沒有結束條件,一定會發生:
棧記憶體溢位錯誤:Stack Over flowError,所以遞迴必須要有結束條件
3.遞迴假設是有結束條件的,就不會發生棧記憶體溢位嗎?
假設結束條件是對的,是合法的,遞迴也會出現記憶體溢位,當遞迴太深的話,導致棧記憶體不夠,因為一直壓棧。
4.在實際的開發中,不建議輕易選擇遞迴,能用for迴圈while迴圈代替的,儘量代替。因為迴圈效率高,耗費記憶體少。遞迴耗費的記憶體比較大,另外遞迴使用不當,會導致jvm死掉。但在極少數的情況下,不用遞迴這個程式沒法實現。
5.在實際開發中,假設真正的遇到了遞迴,怎麼解決?
首先第一步:
先檢查遞迴的結束條件對不對,如果遞迴條件不對,必須對條件進一步修改,知道正確為止
第二步:
假設遞迴條件沒有問題,這是時候需要手動調整JVM的棧記憶體初始化大小,可以將佔記憶體空間調大點。
如果執行時還是出現這個錯誤,只能繼續擴大棧的大小。
public class Digui { public static void main(String[] args) { System.out.println(num(10)); System.out.println(doSome(10)); } //計算從1+2+3+4+。。。。n的和public static int doSome(int n){ //首先我傳入的10,那麼下一次傳的時候肯定是9,通過n-1來的所以下次呼叫是doSome(n-1) //最後一個是1,那麼直接判停條件是1就可以 if(n==1){ return 1; //這是第一次出棧 } return n+doSome(n-1); } //不用遞迴算數 public static int num(int n){ int sum = 0; for (inti = 0;i<=n;i++){ sum = sum + i; } return sum; }