Давайте поговорим о рекурсии! Что такое рекурсивная функция?

Рекурсия — это когда вы используете что-то снова и снова, пока не остановитесь. Рекурсивная функция будет неоднократно вызывать себя до тех пор, пока не будет достигнут базовый случай.

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

let factorial = (number) => {
  if (number === 1){
    return number
  } else {
    return number * factorial(number - 1)
  }
}
factorial(3) => 6
factorial(4) => 24

Вот базовая рекурсивная функция, которая получает факториал передаваемого числа. Давайте посмотрим, что происходит.

Когда передается число, функция проверяет число. Поскольку мы проверяем факториалы, мы можем предположить, что число 1 будет наименьшим числом. Это означает, что мы можем вернуть 1 для базового случая. Базовый случай — это то, как остановится рекурсивная функция. Если мы передали число 2, поскольку оно не выполняется в первом условии (число не равно 1), оно вернет число (2) и умножит его на возвращаемое значение факториала 1, что вернет 1. 1 х 2 = 2 ? Ага. Это кажется правильным.

Если бы мы передали 3 в качестве аргумента, первый проход вернул бы 3 и умножил бы его на factorial(2), который вернул бы 2 и умножил бы его на factorial(1), который вернул бы 1. 3 x 2 x 1 = 6 ? Ага!

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

На что следует обратить внимание:
– Если вы используете рекурсию, избегайте бесконечного стека вызовов, изменив входные данные на рекурсивную функцию. Если бы в приведенном выше примере я решил вернуть число и умножить его на факториал (число), он постоянно вызывал бы сам себя без изменений и, таким образом, застревал бы в бесконечном цикле. Видите?
- Хотя рекурсивные функции — это круто, иногда простой цикл for может быть не менее эффективным.