为一段代码创建递归公式

时间:2015-08-28 12:28:25

标签: java recursion formula master-theorem

我正在做一些功课,而且我正在努力解决一个具体的问题。在我的任务中有一个类似的问题,所以我需要掌握这个问题。

以下是代码:

    public static double power2(double base, int n) {
    switch (n) {
        case 1:
            return base;
        case 2:
            return base * base;
        default:
            if (n % 2 == 0) /* n is even */ {
                return power2(power2(base, n / 2), 2);
            } else /* n is odd */ {
                return power2(power2(base, n / 2), 2) * base;
            }
    }
}

我有基本情况,我认为 0,n = 1; 然而,到达 T(n)是我挣扎的地方。

它必须类似 T(n-1)+ c,n> 1。

我需要用递归公式表示代码。

任何人都可以ELI5吗?

1 个答案:

答案 0 :(得分:2)

我很想说复发是

T(n) = T(n/2) + O(1)

如果您将一般情况重写为

double temp = power2(base, n/2); // T(n/2)
if (n%2 == 0) {
  return power2(temp, 2); // O(1) by looking at the base case
} else {
  return power2(temp, 2) * base; // O(1) by looking at the base case
}

使它成为

O(log(n))

document涵盖了您正在查看的具体问题。他们可能比我做得更好,我很长时间没有看过master theorem