Понимание, почему мой цикл for не работает, чтобы приблизить е

e можно аппроксимировать по формуле e = 1 + (1/1!) + (1/2!) + (1/3!)... + (1/n!). Я пытаюсь использовать для циклов, чтобы принять любое целое число, которое пользователь устанавливает n. Программа должна аппроксимировать e, используя приведенную выше формулу из (1/1!) +.... (1 / n!), И вывести результат.

Вложенный цикл for вычисляет факториал n (протестировал его отдельно и он работает), а определенная переменная, frac, переводит факториал в дробную часть 1 / (ответ на факториал). Я сохраняю значение в переменной e, и оно должно добавлять новую дробь к старому значению каждый раз, когда выполняется итерация. Я не могу не понять, что не так с моими петлями, что они не дают правильного ответа.

System.out.println("Enter an integer to show the result of 
approximating e using n number of terms.");
int n=scan.nextInt();
double e=1;
double result=1;
for(int i=1; n>=i; n=(n-1))
{
    for(int l=1; l<=n; l++)
            {
                result=result*l;
            }
    double frac=(1/result);
    e=e+frac;
}
System.out.println(e);

Выведите, когда я введу целое число 7 как n = 1.0001986906956286

1 ответ

Решение

Вам не нужен весь этот внутренний цикл. Все, что тебе нужно result *= i,

for (int i = 1; i <= n; i++)
{
    result *= i;
    double frac = (1 / result);
    e += frac;
}

Вот версия JavaScript, которую я только что скинул:

function init() {
  const elem = document.getElementById('eapprox');

  let eapprox = 1;
  const n = 15;
  let frac = 1;

  for (var i = 1; i <= n; ++i) {
    frac /= i;
    eapprox += frac;
  }

  elem.textContent = eapprox;
}

Это дает 2.718281828458995. Плункер здесь: http://plnkr.co/edit/OgXbr36dKce21urHH1Ge?p=preview

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