剑指 Offer 16. 数值的整数次方

/*
    数值的整数次方 可分为三种情况, n为负整数,n为0,n为正整数
    1负整数: 需要将 x 转为 1/x , n 转为 -n
    2为0 :  返回 1
    3为正整数,考虑是偶数,还是奇数
            偶数 : myPow(x,n) 转为 myPow(x * x , n/2)
            奇数 : myPow(x,n) 转为 x * myPow(x * x,n/2)
*/

class Solution {
    public double myPow(double x, int n) {
        if(n == 0){
            return 1;
        }
        if(n < 0){
            //防止 -n 溢出,将 1/x 移出来一个
            return 1/x * myPow(1 / x, -n-1);
        }
        return (n % 2 == 0) ? myPow(x * x,n / 2) : x * myPow(x * x,n / 2);
    }
}

 

posted @ 2020-12-13 02:03  peanut_zh  阅读(64)  评论(0编辑  收藏  举报