Почему мой метод, чтобы получить числа Эйлера, вернуть бесконечность? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь получить номер Эйлера с помощью 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);

Итак, я не могу понять, почему он возвращает бесконечность.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Поскольку ваше первое значение j равно 0. Вы делите это на ноль и получаете бесконечность в JS.Все, что вы добавляете к нему, все равно бесконечность

Ниже приводится значение j в каждой из 10 итераций

Бесконечность, 1, 0,5, 0,3333333333333333, 0,25, 0,2, 0,16666666666666666, 0,14285714285714285, 0,125, 0,1111111111111111,

0 голосов
/ 26 апреля 2018

Этот код возвращает бесконечность, поскольку начальное значение j равно 0.В частности, вы добавляете 1/factorial(0) к e.Что возвращает factorial(0)?JavaScript оценивает 1/0 как Infinity, поэтому после первой итерации e уже равен Infinity, и любые последующие итерации добавляют к нему больше.

Чтобы это исправить, просто начните j с1. Это должно сработать!

Редактировать: у Васана была замечательная точка, а именно 0!(0 факториал) фактически оценивается в 1 .Для лучшего исправления вы должны пересмотреть свою функцию factorial.

...