javascript返回无穷大(快速增强)
为什么这段代码返回的幂不同于0的无穷大?您有无限递归。这意味着您的函数正在调用自身,并且没有条件阻止它这样做。所以它一直在调用自己,直到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
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);
}