Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math.pow的JavaScript实现_Javascript_Algorithm_Math_Recursion - Fatal编程技术网

Math.pow的JavaScript实现

Math.pow的JavaScript实现,javascript,algorithm,math,recursion,Javascript,Algorithm,Math,Recursion,我使用log(n)解决方案实现了Math.pow,就像这篇关于Geeksforgeks的文章一样 然而,我发现这个函数并没有像我预期的那样退出它的基本情况。这个程序似乎可以在C中工作,但不能在JS中工作 因此,我的结论是,我认为C语言在JavaScript中也能起作用 我的JavaScript实现缺少什么 预先警告:当前的代码段将出现超出最大调用堆栈的错误 var myPow=函数(x,n){ var res=1 无功温度; 如果(n==0){ 返回1; } 温度=myPow(x,n/2)

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

然而,我发现这个函数并没有像我预期的那样退出它的基本情况。这个程序似乎可以在C中工作,但不能在JS中工作

因此,我的结论是,我认为C语言在JavaScript中也能起作用

我的JavaScript实现缺少什么

预先警告:当前的代码段将出现超出最大调用堆栈的错误

var myPow=函数(x,n){
var res=1
无功温度;
如果(n==0){
返回1;
}
温度=myPow(x,n/2)
如果(n%2==0){
返回温度*温度
}否则{
返回x*temp*temp
}
};
console.log(myPow(2,3))简介:
使用
parseInt
Math.floor
y/2
作为整数,否则将无法达到
0
,这是递归的停止点


细节 如果您想传输LTE[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))
     }

}

演示:
功能功率(x,y){
如果(y==0){返回1}
否则如果(y%2==0){
返回功率(x,parseInt(y/2))*功率(x,parseInt(y/2))
}否则{
返回x*power(x,parseInt(y/2))*power(x,parseInt(y/2))
}
}

log(power(3,2))
从@Abdennour的答案中修改一点

功能功率(x,y){
如果(y==0){
返回1;
}
变量yBy2=y/2;
var-pow=功率(x,parseInt(yBy2,10));
如果(y%2==0){
返回功率*功率;
}否则{
返回x*pow*pow;
}

}
*简单逻辑*

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

console.log(n)
您将看到problem@Anthony:希望它有用吗?您的递归调用不在尾部位置。下面是一个尾部递归ES2015解决方案:
constpower=(base,exp,acc=1)=>exp==0?acc:power(base,exp-1,base*acc)
。查看整数数学的迭代(非递归)方法,了解一些其他想法:虽然这通常是安全的,但始终为parseInt提供基数是标准的最佳做法:
parseInt(y/2,10)
解析字符串并返回整数。您应该改为使用截断小数places@Andreas&@rgthree:THank u,,无论如何,我们的想法是在递归结束时达到
0
,以避免
无限
注意,按位或
与0一起使用也有效:
2.3434 | 0==2
@anthonychong