T(N) = aT(N/b) + O(N^d),其中a,b,d是常数,对于代码

    1. void 递归(int[] arr, int L, int R) {
    2. if (L == R) return arr[L];
    3. int mid = L + (R - L) >> 1;
    4. int leftMax = 递归(arr, L, mid); // 这次的规模为 N/2,调用一次 a+= 1
    5. int rightMax = 递归(arr, mid + 1, R); // 这次的规模为 N/2,调用一次 a+= 1
    6. /*
    7. 所以得a=2, b = 2(N/2的2), 剩下所有代码的复杂度均为O(1), 所以d=0,得
    8. T(N) = 2T(N/2) + O(N^0)
    9. */
    10. return Math.max(leftMax, rightMax);
    11. }
    1. logb^a > d = O(N^log(b,a))
    2. logb^a < d = O(N^d)
    3. logb^a == d = O(N^d * logN)