题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
第一种方法:使用递归,时间复杂度O(logn)
当n为偶数,a^n =(a^n/2)*(a^n/2)
当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a
举例:
2^11 = 2^1 * 2^2 * 2^8
2^1011 = 2^0001 * 2^0010 * 2^1000
第二种方法:累乘,时间复杂度为O(n)
public class Solution {
public double Power(double base, int exponent) {
if(exponent==0)
return 1;
else if(exponent==1)
return base;
else if(exponent==-1)
return 1/base;
int n=Math.abs(exponent);
double s=0.0;
s=Power(base,n>>1);
//右移一位等于除以2
s*=s;
//如果为奇数,则要再乘一个base
if((n&1)==1)
s*=base;
if(exponent<0)
s=1/s;
return s;
}
}