Рекурсивный JavaScript Результат функции "Ошибка диапазона: превышен максимальный размер стека вызовов" - PullRequest
0 голосов
/ 12 июля 2020

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

* Примечание: я хочу использовать рекурсию для ее решения.

function factorial(num, factor) {
  //loop through descending order multiply
  if (num === 1) {
    return newNum
  }
  let newNum = num --;
  let newProduct = num * newNum;
    //recurse
  return factorial(newNum, newProduct);
}

// Test cases
console.log(factorial(4)); // -> 24
console.log(factorial(6)); // -> 720
console.log(factorial(0)); // -> 1

Любые предложения относительно того, как и почему мне следует изменить приведенный выше код.

1 Ответ

1 голос
/ 12 июля 2020

У вас проблема с вашим декрементом: это потому, что исходное значение операнда возвращается до того, как он был изменен (вам нужно изменить num-- на --num). Вы можете посмотреть это https://codeburst.io/javascript-increment-and-decrement-8c223858d5ed. Вы можете изменить свой код на это

function factorial(num, factor=1) {
  //loop through descending order multiply
  if (num <= 1) {
    return factor
  }

  let newProduct = factor * num--;
    //recurse
  return factorial(num, newProduct);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...