Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为一段代码创建递归公式_Java_Recursion_Formula_Master Theorem - Fatal编程技术网

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
。这是有道理的。非常感谢。