Math.pow的JavaScript实现

Ant*_*ung 5 javascript algorithm math recursion

我使用log(n)解决方案实现了Math.pow,就像geeksforgeeks上的这篇文章一样

http://www.geeksforgeeks.org/write-ac-program-to-calculate-powxn/

但是,我发现函数没有按照我的意图退出它的基本情况.这个程序似乎适用于C而不是JS.

因此,我得出的结论是,我假设在JavaScript中有一些关于C的东西.

我的JavaScript实现中缺少什么?

预先警告:代码片段将超出最大调用堆栈错误

var myPow = function(x, n) {
  var res = 1
  var temp;
  if (n === 0) {
    return 1;
  }
  temp = myPow(x, n / 2)
  if (n % 2 === 0) {
    return temp * temp
  } else {
    return x * temp * temp
  }
};

console.log(myPow(2,3));
Run Code Online (Sandbox Code Playgroud)

Abd*_*UMI 5

简短的 :

使用parseIntMath.floory/2整型,unleness你不会达到0它的止动递归


细节

如果你想转换 [C Algo]

int power(int x, unsigned int y)
{
    if( y == 0)
        return 1;
    else if (y%2 == 0)
        return power(x, y/2)*power(x, y/2);
    else
        return x*power(x, y/2)*power(x, y/2);
 
}
Run Code Online (Sandbox Code Playgroud)

对于[JS Algo],您将拥有:

function power(x,y){
     if(y===0){return 1}
     else if (y%2 ===0){
         return power(x,parseInt(y/2))*power(x,parseInt(y/2))
     }else{
          return x*power(x,parseInt(y/2))*power(x,parseInt(y/2))
     }

}
Run Code Online (Sandbox Code Playgroud)

演示:

int power(int x, unsigned int y)
{
    if( y == 0)
        return 1;
    else if (y%2 == 0)
        return power(x, y/2)*power(x, y/2);
    else
        return x*power(x, y/2)*power(x, y/2);
 
}
Run Code Online (Sandbox Code Playgroud)

  • `parseInt()` 解析一个字符串并返回一个整数。您应该使用 [`Math.floor()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor) 而不是截断小数位 (3认同)
  • 请注意,按位或带 0 的 `|` 也有效:`2.3434 | 0 === 2` (3认同)