剑指 Offer 16. 数值的整数次方(中等)
题目
class Solution {
public:
double traversal(double x, int n){
if(n==0) return 1.00000;
double y = traversal(x, n/2); //本题需要对递归时的指数进行二分法,否则超时。
return n%2==0 ? y*y : y*y*x; //y=(x^4)。n=8,则x^8=y*y;n=9,则x^9=y*y*x。
}
double myPow(double x, int n) {
if(n<0) x = 1/x; //先进行指数正负的判断
return traversal(x, n);
}
};
以上方法来自力扣官方题解