leetcode--数值的整数次方

206 阅读1分钟

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

示例 1:
输入: 2.00000, 10
输出: 1024.00000

示例 2:
输入: 2.10000, 3
输出: 9.26100

示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

方法(采用递归)

分析:

在n为正数的情况下

x4x^{4}=x2x^{2}*x2x^{2}

x5x^{5}=x^{2}$$*x^{2}*xx 在n为负数的情况下,只需要计算出它的绝对值xnx^{|n|},然后再1/xnx^{|n|},就可以计算出它的值

代码

/**
 * @param {number} x
 * @param {number} n
 * @return {number}
 */
var myPow = function(x, n) {
    let res=calculation(x,Math.abs(n))//计算n的绝对值
    
    //当n>0时,直接计算x^n,当n<0时,计算1/x^n
    return n>0?res:1/res; 
};
function calculation(x,n){
    if(n===0) return 1;//指数为0时,为1
    if(n===1) return x;//指数为1时,为基值

    //递归计算x^n的一半,x^(n/2)
    let half=calculation(x,Math.floor(n/2));

    //n如果为奇数,返回half*half*x;n如果为偶数,返回half*half
    return n%2?half*half*x:half*half
}