Math.pow的JavaScript实现

问题描述 投票:5回答:3

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

http://www.geeksforgeeks.org/write-a-c-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));
javascript algorithm math recursion
3个回答
3
投票

Brief :

使用parseIntMath.floory/2作为整数,unleness你将无法达到0这是递归的终结者。


Details

如果你想翻译[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);

}

到[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))
     }

}

DEMO :

    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))
         }
    
    }


console.log(power(3,2))

0
投票

从@ Abdennour的回答中稍微修改一下

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

0
投票

*简单逻辑*

function pow (p,y){
    if(p > 0 && y === 0){
        return 1;
    }
    x = p;
    while(y > 1){
        x = p*x;
        y--;
    }
    return x;
}


console.log(pow(0,0)+'\n'); // 0
console.log(pow(2,4)+'\n'); // 16
console.log(pow(2,0)+'\n'); // 1
console.log(pow(0,2)+'\n'); // 0
© www.soinside.com 2019 - 2024. All rights reserved.