Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript返回无穷大(快速增强)_Javascript - Fatal编程技术网

javascript返回无穷大(快速增强)

javascript返回无穷大(快速增强),javascript,Javascript,为什么这段代码返回的幂不同于0的无穷大?您有无限递归。这意味着您的函数正在调用自身,并且没有条件阻止它这样做。所以它一直在调用自己,直到javascript引擎停止它。在函数中放置控制台日志,并在控制台中查看它。函数中的递归永远不会停止。这是因为to/2在大于0时永远不会为0。当您使用初始值10调用时,to将在整个递归过程中具有这些值: 10->5->2.5->1.25->0.625 您可以使用Math.floor()截断小数点后的浮点部分。这是您想要的功能: function pow(n,to

为什么这段代码返回的幂不同于0的无穷大?

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

函数中的递归永远不会停止。这是因为
to/2
在大于0时永远不会为0。当您使用初始值10调用时,to将在整个递归过程中具有这些值:

10->5->2.5->1.25->0.625

您可以使用
Math.floor()
截断小数点后的浮点部分。这是您想要的功能:

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

因为您没有使用
Math.pow()
!如果
to
不是
2
的幂呢?它永远不会是零,不管你把它除以多少次
2
@jAndy,如果我想用Math.pow()我会的。我将其用于培训目的,问题是为什么“this”代码返回无穷大,而不是如何在javascript中计算pow()至<代码>h=功率(n,数学楼层(至/2))以确保
to
始终为整数。@MattBall Ah ok。你的答案似乎是对的。我假设它与其他语言中的1/2=0一样,但只要检查一下,它就是0.5。如何将数字转换为整数?我知道我可能也能把它铺成地板,但我不想。
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);
}