法一 递归法
需要考虑base为0的情况,以及exponent为负数的情况。
a^n=a*a^(n/2)*a^(n/2) 当n为奇数时
a^n=a^(n/2)*a^(n/2) 当n为偶数时
class Solution {
public:
double Power(double base, int exponent) {
if(base==0)
return 0;
else if(exponent==0)
return 1;
else if(exponent==1)
return base;
else if(exponent>1)
{
double res=Power(base,exponent>>1);
res*=res;
if(exponent&0x1)
return res*base;
else
return res;
}
else
{
return 1.0/Power(base,-exponent);
}
}
};
法二 快速幂法
例如求,先把75写作二进制形式:1001011
即
那么我们可以先求出。再根据二进制相应位置是否为1选择性地进行乘法。
class Solution {
public:
double powercore(double base,int exponent)
{
double res=1;
while(exponent>0)
{
if(exponent&1)
res*=base;
base=base*base;
exponent>>=1;
}
return res;
}
double Power(double base, int exponent) {
if(base==0)
return 0;
else if(exponent==0)
return 1;
else if(exponent==1)
return base;
else if(exponent>1)
{
return powercore(base,exponent);
}
else
return 1/Power(base,-exponent);
}
};