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

为什么这个代码返回无穷大而不是 0?

4

2 回答 2

0

你有无限递归。这意味着您的函数正在调用自己,并且没有条件阻止它这样做。所以它会永远调用自己,直到 javascript 引擎停止它。将控制台日志放入您的函数并在控制台中观看。

于 2013-09-19T13:37:12.277 回答
0

函数中的递归永远不会停止。这是因为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-19T13:41:55.183 回答