具有递归效率的Java实现功能函数

时间:2014-10-16 07:46:56

标签: java recursion

我们应该尝试这种方法

 long genericPow(int base,int exp){

    if(exp==0)return 1;
    if(exp==1)return base;
    if(exp==2)return base*base;
    if(exp==3)return base*base*base;

    return genericPow(base, 3)*genericPow(base, exp-3);


}

例如,如果你想计算x ^ 15,通过平方取幂的方法会给你:

x^14 = (x^3)*(x^11) 
x^11 = (x^3)*(x^8)
x^8 = (x^3)*(x^5)
x^5 = (x^3)*(x^2)
x^3 = x*x*x

因此它会将循环复杂度降低3。

3 个答案:

答案 0 :(得分:0)

我不太确定你的问题在这里。 这并没有像鲍里斯蜘蛛所指出的那样降低复杂性。 如果您正在尝试创建一个有效的算法来计算x ^ n的功效,您可以使用简单的分而治之的策略。注意,如果n是偶数,则x ^ n =(x ^(n / 2))^ 2,如果是奇数,则x ^ n = x(x(n-1)/ 2)^ 2。因此,您可以使用它来构建递归算法,该算法可以有效地计算数字的幂。

答案 1 :(得分:0)

static int pow(int a, int b) {
    return powInner(a, b, 1);
}

static int powInner(int a, int b, int c) {
    return b > 0 ? powInner(a, b - 1, a * c) : c;
}

我想这不是重点?

答案 2 :(得分:0)

 long pow(long x,int n){
    if(n<=0)return 1;
    if(n==1)return x;
    if(n==2)return (x * x);


    if(n%2==0){
        return pow(pow(x, n/2),2);
    }else{

        return x*pow(x, n-1);
    }




}

复杂性O(logn)