0

我正在尝试使用 Javascript 获取欧拉数。

这是我的代码,返回无穷大:

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);

所以,我不明白为什么它会返回无穷大。

4

2 回答 2

2

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

要解决这个问题,只需从j1 开始。这应该可以解决问题!

编辑:Vasan 有一个很好的观点,那就是 0!(0 factorial)实际上计算为 1。为了更好地修复,您应该重新评估您的factorial功能。

于 2018-04-25T21:41:55.267 回答
0

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

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

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

于 2018-04-25T21:44:10.327 回答