Рекурсивные функции — это функции, которые вызывают сами себя.

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

Рекурсия — это альтернатива зацикливанию при решении самоповторяющихся задач путем вызова самой себя.

Чтобы разработать факториальную функцию в JavaScript, вы можете просто использовать цикл for следующим образом:

function factorial(n) {
    let result = 1;
    for (let i = n; i > 1; i--) {
        result *= i;
    }
    return result;
}

Однако она будет более удобочитаемой, если вы разработаете функцию factorial() с использованием техники рекурсии. См. следующую рекурсивную функцию factorial():

function factorial(n) {
    if (n <= 1) { //base case
        return 1;
    } else {
        return n * factorial(n - 1); //recursive call
    }
}

Вы можете видеть это в теле функции, которую функция вызывает сама. Эта часть функции называется рекурсивным вызовом.

Вы также можете видеть, что у функции есть точка остановки, которую мы называем базовым случаем. Если бы не было точек остановки, функция просто продолжала бы работать вечно. Превышение максимального размера стека вызовов означает, что в стек было помещено слишком много элементов, и ваша программа аварийно завершилась.

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

Извлеченный урок: рекурсивное решение оценивается путем выполнения нескольких рекурсивных вызовов до тех пор, пока не будет достигнут базовый случай. Никакой рекурсивный вызов не может быть оценен, пока базовый случай не предоставит решение. Затем можно решить другие рекурсивные вызовы, один за другим, пока мы не придем к нашему решению. -Школа Флэтайрон