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