给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
Math.pow()
函数返回基数(base
)的指数(exponent
)次幂,即 baseexponent。
function Power(base, exponent)
{
return Math.pow(base, exponent);
}
function Power(base, exponent)
{
return base ** exponent;
}
其实JavaScript为我们提供的Math.pow和幂运算符方法原理是通过递归或者迭代计算出来的,具体实现原理如下。
递归实现
function Power(base, exponent){
if(exponent === 0) return 1;
var n = exponent;
if(exponent < 0) n = 0-exponent;
var temp = Power(base, parseInt(n / 2));
var result = 1;
if (n % 2 !== 0) result = base * temp * temp; // 或者 if(n & 1 === 1)
else result = temp * temp;
return exponent < 0 ? 1 / result : result;
}
其中的temp
实现的是幂的二分运算
比如 511,我们将之拆分成 55 * 55 但是 依据 11 是奇数这时候会少了一个 51 也就是base
迭代实现
function Power(base, exponent)
{
var result = 1.0;
if(exponent == 0) return 1;
var n = exponent;
if(exponent < 0) n = 0-exponent;
for(var i = 0 ; i < n;i++){
result *= base;
}
return exponent < 0 ? 1 / result : result;
}
上一篇:11-二进制中1的个数