递归
递归行为本质上就是基于系统栈的,所有的递归都可以改为迭代。有如下代码,寻找数组 arr[L, R]范围内的最大值,使用递归完成:
public static int process(int[] arr, int L, int R) {
if (L == R) {
return arr[L];
}
int mid = L + ((R - L) >> 1); // 中点
int leftMax = process(arr, L, mid);
int rightMax = process(arr, mid+1, R);
return Math.max(lefMax, rightMax);
}每执行一次就压入系统栈,每次执行结束出栈,如此循环。

master公式
Master公式是用来解决递归问题时间复杂度的公式。记录主方法的表现形式:
上述排序arr的代码符合master公式,他的时间复杂度公式为:
如果递归满足Master公式,那么时间复杂度为:
如果
logbA>d,那么时间复杂度为O(N^(logbA))如果
logbA<d,那么时间复杂度为O(N^d)如果
logbA==d,那么时间复杂度为O(N^d * logN)
这里 a = 2, b = 2 ,d = 0,其 logbA = 1 ,所以 logbA > d,故上述代码的时间复杂度为 O(N^(logbA)),即O(N)
最后更新于
这有帮助吗?