以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
109. 实现`Math.pow()`
可以使用二分法来优化乘法运算的次数,加快计算速度。
具体来说,假设要计算 x 的 n 次方,可以进行以下步骤:
- 如果 n 为 0,返回 1。
- 如果 n 为正数,那么先将 n 折半,计算 x 的 n/2 次方的结果,然后再进行平方,得到 x 的 n 次方的结果。
- 如果 n 为负数,那么先将 n 取相反数,然后再按照步骤 2 进行运算,最后将结果取倒数。
具体实现如下:
function pow(x, n) { if (n === 0) { return 1; } if (n > 0) { const half = pow(x, Math.floor(n / 2)); return n % 2 === 0 ? half * half : half * half * x; } // n < 0 return 1 / pow(x, -n);}
在这个实现中,进行了 Math.floor(n / 2) 次乘法运算,时间复杂度为 O(log n)。比起连续进行 n 次乘法运算的时间复杂度 O(n),效率提升了很多。