为什么我的方法得到欧拉数,return无穷大?
Why my method to get euler numbers, return infinity?
我正在尝试使用 Javascript 获得欧拉数。
这是我的代码,return无穷大:
function euler_number() {
for(var j = 0, e = 0; j < 10; j++) {
e += 1/(factorial(j));
}
return e;
}
function factorial(n) {
if(n <= 1) return n;
return factorial(n - 1) * n;
}
var r = euler_number();
console.log(r);
所以,我不明白为什么它 return 无穷大。
这段代码return是无穷大,因为j
的初始值是0
。特别是,您要将 1/factorial(0)
添加到 e
。 factorial(0)
return 是什么意思? JavaScript 将 1/0
计算为 Infinity
,因此在第一次迭代后,e
已经是 Infinity
,任何后续迭代都会添加更多内容。
要解决此问题,只需从 j
1 开始。这应该可以解决问题![=22=]
编辑:Vasan 有一个很好的观点,那就是 0! (0 阶乘)actually evaluates to 1。为了更好地解决问题,您应该重新评估 factorial
函数。
因为你的 j 的第一个值是 0。你将它除以零并在 JS 中得到无穷大。无论你添加什么,它仍然是无穷大
以下是您在第 10 次迭代中的每一次的 j 值
无限,
1、
0.5,
0.3333333333333333,
0.25,
0.2,
0.16666666666666666,
0.14285714285714285,
0.125,
0.1111111111111111,
我正在尝试使用 Javascript 获得欧拉数。
这是我的代码,return无穷大:
function euler_number() {
for(var j = 0, e = 0; j < 10; j++) {
e += 1/(factorial(j));
}
return e;
}
function factorial(n) {
if(n <= 1) return n;
return factorial(n - 1) * n;
}
var r = euler_number();
console.log(r);
所以,我不明白为什么它 return 无穷大。
这段代码return是无穷大,因为j
的初始值是0
。特别是,您要将 1/factorial(0)
添加到 e
。 factorial(0)
return 是什么意思? JavaScript 将 1/0
计算为 Infinity
,因此在第一次迭代后,e
已经是 Infinity
,任何后续迭代都会添加更多内容。
要解决此问题,只需从 j
1 开始。这应该可以解决问题![=22=]
编辑:Vasan 有一个很好的观点,那就是 0! (0 阶乘)actually evaluates to 1。为了更好地解决问题,您应该重新评估 factorial
函数。
因为你的 j 的第一个值是 0。你将它除以零并在 JS 中得到无穷大。无论你添加什么,它仍然是无穷大
以下是您在第 10 次迭代中的每一次的 j 值
无限, 1、 0.5, 0.3333333333333333, 0.25, 0.2, 0.16666666666666666, 0.14285714285714285, 0.125, 0.1111111111111111,