题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解法一:递归
public double Power(double base, int exponent) {
if(exponent==0){
return 1;
}else if(exponent<0){
return 1/Power(base,-exponent);
}else{
return Power(base,exponent-1)*base;
}
}
解法二:传统公式求解时间复杂度O(n)public double Power(double base, int exponent) {
double result=1;
for(int i=1;i<=Math.abs(exponent);i++){
result*=base;
}
if(exponent<0){
result=1/result;
}
return result;
}
解法三:递归:n为偶数,a^n=a^n/2*a^n/2; n为奇数,a^n=(a^(n-1)/2)*(a^(n-1/2))*a,时间复杂度O(logn)
public double Power(double base, int exponent) {
int n=Math.abs(exponent);
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result=Power(base,n>>1);
result*=result;
if((n & 1) ==1){
result*=base;
}
if(exponent<0){
result=1/result;
}
return result;
}