Java 为一段代码创建递归公式
我正在做一些家庭作业,我正在努力解决一个具体的问题。我的作业中有一个类似的问题,所以我需要掌握这个窍门 代码如下:Java 为一段代码创建递归公式,java,recursion,formula,master-theorem,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
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
我需要用递归公式来表示代码
有人能帮我解决这个问题吗?我想说的是,复发是
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))
这涵盖了您正在研究的特定问题。他们的工作可能比我做得好,我已经很久没看了。你想做什么?“找出一个数字可以除以2的次数”?@ozgur我需要用递归公式T(n)来表示代码。@Vlad是的,这是正确的。在我的教科书中没有这样的说法,所以如果规定乘法需要c个时间单位,那么循环次数是‘t(n)=t(n/2)+c’?当数字为奇数时,乘以基数会额外增加一段时间吗?不管怎样,谢谢你的帮助!啊,我错过了那部分。我假设在n为奇数的情况下,它将是2c,一个c表示n=2的基本情况,然后另一个c表示结尾处的
*base
。这是有道理的。非常感谢。