为什么我的方法得到欧拉数,返回无穷大?

时间:2018-04-25 21:32:25

标签: javascript algorithm eulers-number

我试图用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);
&#13;
&#13;
&#13;

所以,我无法理解为什么它会返回无穷大。

2 个答案:

答案 0 :(得分:2)

此代码返回无穷大,因为j的初始值为0。特别是,您要将1/factorial(0)添加到efactorial(0)返回什么? JavaScript将1/0评估为Infinity,因此在第一次迭代后,e已经Infinity,并且任何后续迭代都会为其添加更多内容。

要解决此问题,只需从1开始j。这应该可以解决问题!

编辑:瓦桑有一个很好的观点,那就是0! (0阶乘)actually evaluates to 1。要获得更好的解决方案,您应该重新评估factorial功能。

答案 1 :(得分:0)

因为j的第一个值是0.你将它除以零并在JS中获得无穷大。无论你添加什么,它仍然是无限的

以下是你在10次迭代中的j值

无穷远, 1, 0.5, 0.3333333333333333, 0.25, 0.2, 0.16666666666666666, 0.14285714285714285, 0.125, 0.1111111111111111,