Skip to content

递归和 master 公式


理解递归

java
// 用这个例子讲解递归如何执行
public class GetMaxValue {

	public static int maxValue(int[] arr) {
		return f(arr, 0, arr.length - 1);
	}

	// arr[l....r]范围上的最大值
	public static int f(int[] arr, int l, int r) {
		if (l == r) {
			return arr[l];
		}
		int m = (l + r) / 2;
		int lmax = f(arr, l, m);
		int rmax = f(arr, m + 1, r);
		return Math.max(lmax, rmax);
	}

	public static void main(String[] args) {
		int[] arr = { 3, 8, 7, 6, 4, 5, 1, 2 };
		System.out.println("数组最大值 : " + maxValue(arr));
	}
}

Master 公式

所有子问题规模相同的递归才能用 master 公式,T(n) = a * T(n/b) + O(n^c),a、b、c 都是常数

(1)如果 log(b,a) < c,复杂度为:O(n^c)

(2)如果 log(b,a) > c,复杂度为:O(n^log(b,a))

(3)如果 log(b,a) == c,复杂度为:O(n^c * logn)

特殊情况

T(n) = 2T(n/2) + O(nlogn),时间复杂度是 O(n * ((logn)的平方)),证明过程比较复杂,记住即可