function pow(n,to){
if(to == 0 ) return 1;
h = pow(n,to/2);
return h*h* ((to % 2) == 0 ? 1 : n);
}
为什么此代码对于不同于0的功率返回无穷大?
答案 0 :(得分:0)
你有无限的递归。意味着你的函数正在调用自己,没有条件阻止它这样做。所以它一直在调用自己,直到javascript引擎停止它。将控制台日志放入您的功能并在控制台中观看。
答案 1 :(得分:0)
函数中的递归永远不会停止。这是因为当to / 2
大于0时,Math.floor()
将永远不会为0. to 在您使用初始值10调用它时将在整个递归过程中具有这些值:
10 - > 5 - > 2.5 - > 1.25 - > 0.625 ...
您可以使用function pow(n, to) {
if (to == 0) {
return 1;
}
var h = pow(n, Math.floor(to / 2));
return h * h * ((to % 2) == 0 ? 1 : n);
}
切断小数点后的浮点部分。这是你想要的功能:
{{1}}