根据公式,有两种实现方式,递归实现和非递归
递归实现
double pow1(double a,int b){
double ans = 1;
int c = abs(b);
if(c == 0) return 1;
if(c == 1) return b > 0 ? b : 1/b;
ans = pow(a,c>>1);
ans *= ans;
if(c & 1){
ans *= a;
}
return b > 0 ? ans : 1/ans;
}
非递归实现
double pow2(double a,int b){
double ans = 1;
int c = abs(b);
while(c != 0){
if(c&1){
ans *= a;
}
c >>= 1;
a *= a;
}
return b > 0 ? ans : 1/ans;
}