Попытка напечатать факториал числа с рекурсией, используя javascript, но это не дает ожидаемый результат - PullRequest
0 голосов
/ 31 марта 2020

Попытка напечатать факториал числа с рекурсией, используя javascript, но не дает ожидаемого результата.

function factorialRecursion(n){
return n * factorialRecursion(n - 1);
}
factorialRecursion(6);

Uncaught RangeError: Максимальный размер стека вызовов превышен при factorialRecursion (eval at factorial (enter code here index. html: 3),: 1: 28) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html): 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index) . html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3),: 3: 13) при factorialRecursion (eval at factorial (index. html: 3), : 3: 13)

1 Ответ

1 голос
/ 01 апреля 2020

Стек переполняется, потому что нет базового регистра .

  • для вычисления factorial(6), вам нужно знать ответ на factorial(5)
  • чтобы вычислить factorial(5), вам нужно знать ответ на factorial(4)
  • ...
  • , чтобы вычислить factorial(1), вам нужно знать ответ на factorial(0)
  • для вычисления factorial(0), вам нужно знать ответ на factorial(-1)
  • для вычисления factorial(-1), вам нужно знать ответ на factorial(-2)
  • ...

Выше мы видим, что исходная программа просто продолжает n - 1 бесконечно, пока стек не переполнится.

Исправление в вашей программе может выглядеть как -

function factorial(n) {
  if (n <= 0)           // <-- base case
    return 1
  else                  // <-- inductive case (n > 0)
    return n * factorial(n - 1)
}

console.log(factorial(6))
// 720
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...