按照課本「白話演算法」第四章的遞迴練習

練習一下遞迴的使用,有些程式語言編寫的邏輯都是使用遞迴,反而沒有迴圈的概念,例如(Haskell)

要求:求陣列{1,2,3,4,5}總和

這個用迴圈很快就完成了

int sum=0;
for(int i = 0; i< a.length; i++){
    sum += a[i];
}

 

用遞迴的話,主要是練習Divide&Conquer的思考,找出遞迴的base case

public class Try {
    public static void main(String[] args) {
        int a [] = {1,2,3,4,5};
        System.out.print(sum(a));


    }

    public static int sum(int a[]){
        if(a.length==1){    //base case 直到陣列長度剩1才回傳該數值
            return a[0];
        }
        int newA [] = new int[a.length-1];  //若不是1,就創建一個縮短一個長度的陣列
        System.arraycopy(a,1,newA,0,newA.length);   //複製元陣列除了的第一個之外的元素
        return a[0]+ sum(newA); //加上原陣列的第一個數
    }
}

image

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Lillian 的頭像
    Lillian

    安安的code日記

    Lillian 發表在 痞客邦 留言(0) 人氣()