1. 程式人生 > 實用技巧 >java 遞迴方法

java 遞迴方法

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 (int
i = 0;i<=n;i++){ sum = sum + i; } return sum; }