我试图用Javascript获取euler号码。
这里是我的代码,返回无穷大:
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);
所以,我无法理解为什么它会回归无穷大。
此代码返回无穷大,因为j
的初始值是0
。特别是,你将1/factorial(0)
添加到e
。 factorial(0)
回归了什么? JavaScript将1/0
评估为Infinity
,因此在第一次迭代之后,e
已经是Infinity
,并且任何后续迭代都会增加更多。
要解决这个问题,只需在1开始j
。这应该可以解决!
编辑:瓦桑有一个很好的观点,那就是0! (0阶乘)actually evaluates to 1。为了更好地修复,您应该重新评估您的factorial
函数。
因为你的j的第一个值是0.你将它除以零并在JS中获得无穷大。无论你添加什么,它仍然是无限的
以下是10次迭代中每个j的值
Infinity,1,0.5,0.3333333333333333,0.25,0.2,0.16666666666666666,0.14285714285714285,0.125,0.1111111111111111,