我使用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));
答案 0 :(得分:3)
使用parseInt
或Math.floor
将y/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))
}
}
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