Почему мой метод, чтобы получить числа Эйлера, вернуть бесконечность?

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

Решение

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

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

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

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

Ниже указано ваше значение j в каждой из 10 итераций.

Infinity, 1, 0,5, 0,3333333333333333, 0,25, 0,2, 0,16666666666666666, 0,14285714285714285, 0,125, 0,1111111111111111,

Другие вопросы по тегам