二分求幂,
还是觉得非递归形式好理解一点。
然后就是有几个n=INT_MIN的用例,以及1、-1的用例。
这种需要特判一下~
class Solution {
public:
double myPow(double x, int n) {
if(x-1==0) return 1;
if(x+1==0) return n%2==0?1:-1;
if(n==INT_MIN) return 0;
double ans=1;
int sign=n>0?1:-1;
n=n>0?n:-n;
while(n>0){
if(n & 0x01){
ans*=x;
}
x*=x;
n>>=1;
}
if(sign<0) return 1.0/ans;
return ans;
}
//递归形式
// if(n>0) return 1.0/power(x,n);
// else return power(x,n);
double power(double x,int n){
if(n==0) return 1;
double val=power(x,n/2);
if(n%2) return val*val;
else return val*val*x;
}
};