剑指 Offer 16. 数值的整数次方 - 力扣(LeetCode)
快速幂
class Solution {
public:
double myPow(double x, long n) {
if(n == 0) return 1;
if(n < 0) return 1/myPow(x, -n);
return qmul(x, n);
}
double qmul(double x, long n){
if(n == 0) return 1;
double y = qmul(x, n/2);
return n%2 ? x*y*y : y*y;
}
};
递归:
class Solution {
public:
double myPow(double x, long n) {
if(n == 0) return 1;
if(x == 1) return double(1);
if(n < 0) return 1/myPow(x, -n);
if(n%2) return x*myPow(x, n-1);
return myPow(x*x, n/2);
}
};