Math.pow的JavaScript实现
我使用log(n)解决方案实现了Math.pow,就像这篇关于Geeksforgeks的文章一样 然而,我发现这个函数并没有像我预期的那样退出它的基本情况。这个程序似乎可以在C中工作,但不能在JS中工作 因此,我的结论是,我认为C语言在JavaScript中也能起作用 我的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)
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