javascript返回无限(快速功率)

时间:2013-09-19 13:32:03

标签: javascript

function pow(n,to){
  if(to == 0 ) return 1;  
  h = pow(n,to/2);
  return h*h* ((to % 2) == 0 ? 1 : n);  
}

为什么此代码对于不同于0的功率返回无穷大?

2 个答案:

答案 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}}