В этом блоге мы рассмотрим ключевую концепцию информатики. Да, вы догадались - рекурсия!

Что такое рекурсия? 🤔

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

function recursion() {
  recursion();
}

Что ж, бесконечная рекурсия была бы бессмысленной, но при правильном использовании она может быть мощным и полезным инструментом!

Циклы или рекурсия? ➿

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

Давайте посмотрим на функцию обратного отсчета. Ура, канун Нового года! Все мы знаем, что наиболее распространенным аспектом подготовки к Новому году является знаменитый 10-секундный обратный отсчет, поэтому давайте посмотрим на функцию обратного отсчета до Нового года ниже:

function newYearsCountdown(number) {
  for (let i = 0; i >= 0; i--) {
    console.log(i)
  }
}

Хорошая петля. Но мы можем быть более эффективными и вместо этого сделать это с помощью рекурсии. Давайте посмотрим, как это будет выглядеть ниже:

function newYearsCountdown(number) {
  console.log(number);
  newYearsCountdown(number - 1);
}

Так, как это работает? Мы разделим его на 4 этапа, чтобы обеспечить четкое понимание.

Шаг 1: мы вызываем функцию newYearsCountdown(10), анализируя ее через 10 (секунд) в качестве аргумента.

Шаг 2: Мы печатаем number в консоль. Здесь мы наблюдаем обратный отсчет.

Шаг 3. Перед тем, как функция newYearsCountdown завершится, она затем вызывает newYearsCountdown(9), поскольку number — 1 будет равно 9, поскольку мы начали с аргументом 10.

Шаг 4: newYearsCountdown(9) запускается, а затем выводит на консоль 9. Прежде чем newYearsCountdown(9) завершится, он затем вызывает newYearsCountdown(8) из-за (number — 1), и процесс продолжается и продолжается.

Где это остановится? 🛑

Теперь, если бы мы продолжили эту функцию в том виде, в котором мы ее написали, мы бы фактически вышли за пределы нуля, а это не то, что мы хотим!

Чтобы усовершенствовать нашу функцию, мы можем добавить условный оператор, который не дает нам выйти за пределы нуля. Давайте посмотрим на новое решение:

function newYearsCountdown(number) {
 console.log(number);
 if (number === 0) {
   return;
 } else {
   newYearsCountdown(number - 1);
 }
}

Теперь, когда number равно 0, мы не будем вызывать функцию снова, а просто return, что предотвращает вызов newYearsCountdown.

Чтение 📖 и письмо ✍🏼

Чтобы познакомиться с рекурсией, потребуется некоторое время, но вот два навыка, которые вам пригодятся:

  1. Чтение рекурсивного кода. Следует обратить внимание на две вещи. Базовый случай и рекурсивный случай. Какой базовый случай мы ищем и как рекурсивный случай наконец достигает этого результата?
  2. Написание рекурсивного кода - переключите менталитет с цикла на рекурсию. Выполняйте рекурсию для простых задач, для которых вы обычно используете циклы. Развивайте эти задачи до более сложных и похвалите себя за свои достижения!

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

Больше контента на plainenglish.io