我们应该尝试这种方法
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。
答案 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)