[JAVA] 第一章 緒論(下) - 迭代與遞迴 : 陣列求和:二分遞迴(Divide and conquer)

原理:分而治之(Divide and conquer)
Average case時間複雜度:O(n)

做法:

import java.util.ArrayList;
import java.util.List;

public class Test {

  public static void main(String[] args) {
    List<Integer> a = new ArrayList<>();
    a.add(12);
    a.add(33);
    a.add(2);
    a.add(84);
    a.add(56);
    a.add(5);

    int lo = 0, hi = a.size()-1;
    int sum = sum(a, lo, hi);
    System.out.println(sum);

  }

  // 陣列求和:二分遞迴
  public static int sum(List<Integer> a, int lo, int hi) {

    if (lo == hi) return a.get(lo);// index相同,回傳其中一個值就可

    // 將求和範圍切成兩半,效率比較快:先得出mid
    int mid = (lo+hi) / 2;// 除以2
    return sum(a, lo, mid) + sum(a,mid+1, hi);// 合併
  }


}

如有敘述錯誤,還請不吝嗇留言指教,thanks!