Math.pow的JavaScript实现

时间:2016-07-29 19:35:13

标签: javascript algorithm math recursion

我使用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));

3 个答案:

答案 0 :(得分:3)

简要说明:

使用parseIntMath.floory/2作为整数,不会达到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);

}

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




答案 1 :(得分: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;
    }
}

答案 2 :(得分: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