怎么理解遞歸

怎么理解遞歸?

這是一個曾經(jīng)困擾過我的一個問題,簡單理解:

  1. 遞歸就是方法自己調(diào)用自己
  2. 編寫的時候一定要有一個結(jié)束條件,否則將會造成StackOverflowError的錯誤。

先來看一個栗子:
當(dāng)我們需要計算1 ~ n 的和時,一般的代碼會這么寫:

public static void main(String[] args){

    int n = 5;

    //調(diào)用該方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//1-N的求和.
public static int sum(int n){

    int sum = 0;

    for(int i=0;i<=n;i++){
        sum += i;
    }

    return sum;
}

使用遞歸時,代碼如下:

public static void main(String[] args){

    int n = 5;

    //調(diào)用該方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//該方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){

    if(n==1){
        return 1;
    }else{
        return n + sum(n-1);
    }

}

那我們來理解一下什么叫做 “ 自己調(diào)自己 ” 吧!

public static void main(String[] args){

    int n = 5;

    //調(diào)用該方法完成1-N的求和
    int result = sum(n);

    System.out.println(result);

}

//該方法完成1-N的求和.
//1+2+3+4+5+...N
public static int sum(int n){  //第一次執(zhí)行:n=5;第二次執(zhí)行:sum(4)...

    if(n==1){                          //第一次:n=5,所以不執(zhí)行;第二次執(zhí)行:n=4,所以不執(zhí)行;...
        return 1;                      //第五次執(zhí)行n==1,return = 1;
    }else{                
        return n + sum(n-1);        // 第一次執(zhí)行: 5 + sum(5-1)  即為 :5 + sum(4) 
                                    // 第二次執(zhí)行: 4 + sum(4-1)  即為 :4 + sum(3) 
                                   //...3-1, 3 + sum(2)
                                   //第四次執(zhí)行: 2 + sum(,2-1)  即為 :2 + sum(1)
    }        

}

結(jié)果是多少自己算算,哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容