我正在做一些功课,而且我正在努力解决一个具体的问题。在我的任务中有一个类似的问题,所以我需要掌握这个问题。
以下是代码:
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吗?
答案 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。