неожиданный результат по рекурсивной функции - PullRequest
0 голосов
/ 11 апреля 2020

Я следовал по пути всего выполнения и, согласно моим расчетам, должно быть возвращено 24, но на самом деле оно возвращает 7

function factorial(x) {
    if (x < 0) return;
    if (x === 0) return 1;
    return x + 1 * factorial(x - 1);
  }

let x = factorial(3);

console.log(x); //7

Скорее всего, я неправильно понимаю рекурсивные функции

1 Ответ

3 голосов
/ 11 апреля 2020

Кажется, вы хорошо понимаете основы рекурсивного программирования, однако я не уверен, что вы полностью понимаете, как работает факториальная функция.

Например:

3! = 3 * 2 * 1 = 6

4! = 4 * 3 * 2 * 1 = 24

Вы можете express рекурсивно:

a (0) = 1

a (n) = a (n - 1) * n

Реализуя эту логику c в своем коде, вы получите следующее:

function factorial(x) {
  if (x < 0) return;
  if (x === 0) return 1;
  return x * factorial(x - 1);
}

console.log(factorial(4))

Возвращает 24, как и ожидалось.

...