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