function pow(n,to){
if(to == 0 ) return 1;
h = pow(n,to/2);
return h*h* ((to % 2) == 0 ? 1 : n);
}为什么这段代码会返回不同于0的无穷大值?
发布于 2013-09-19 13:41:55
函数中的递归永远不会停止。这是因为当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);
}发布于 2013-09-19 13:37:12
你有无限递归。这意味着您的函数正在调用自己,并且没有条件阻止它这样做。所以在javascript引擎停止之前,它会永远调用自己。将控制台日志放入您的函数,并在控制台中查看它。
https://stackoverflow.com/questions/18896072
复制相似问题