T(N) = aT(N/b) + O(N^d),其中a,b,d是常数,对于代码
void 递归(int[] arr, int L, int R) {if (L == R) return arr[L];int mid = L + (R - L) >> 1;int leftMax = 递归(arr, L, mid); // 这次的规模为 N/2,调用一次 a+= 1int rightMax = 递归(arr, mid + 1, R); // 这次的规模为 N/2,调用一次 a+= 1/*所以得a=2, b = 2(N/2的2), 剩下所有代码的复杂度均为O(1), 所以d=0,得T(N) = 2T(N/2) + O(N^0)*/return Math.max(leftMax, rightMax);}
- logb^a > d = O(N^log(b,a))
- logb^a < d = O(N^d)
- logb^a == d = O(N^d * logN)
