Понимание рекурсии

Привет, как дела?
Я надеюсь, что у вас, дорогой читатель, который нашел этот пост, будет отличный день! 😎


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


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

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

Давайте поймем это на очень простых примерах; представьте, что у вас есть очень простой компьютер, он может решать задачи только с помощью простых операций.
У вас есть список чисел:

li = [1, 2, 3, 4, 5, 6]
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь для каждого элемента этого списка нужно проверить, какое из них является значением x функции: f(x): x-2 = 2, мы можем легко проверить это, если используем цикл, например, «While» или «for», и я приведу пример в псевдокоде:

  • Для каждого элемента в списке li:
  • Если результат вычитания 2 из элемента равен 2:
  • вывести true

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

Потеряли дорогу? Не волнуйтесь, давайте посмотрим пример:

Сначала в псевдокоде, а затем мы рассмотрим это в коде, у нас есть список li:

Tenemos una lista:
li = [1, 2, 3, 4, 5, 6]
-> Creamos una función que recibe esa lista.
-> Verifica si el primer elemento de la lista existe.
-> Si es correcto pregunta: ¿elemento - 2 = 2?
-> Si esto también fue correcto, entonces retorne verdadero.
-> En caso de que sea falso, entonces elimine el primer elemento de la lista y vuelva a llamar esta función con la nueva lista.
Войдите в полноэкранный режим Выход из полноэкранного режима

Ну, вот и все… Просто, не правда ли? Хорошо, давайте перейдем к примеру кода:

Для целей этого руководства я буду использовать Python для примеров кода, если вам нравится другой язык, например Java или JavaScript, оставьте это в комментариях 😀

lista = [1, 2, 3, 4, 5, 6]
def miFuncion(li):
    elem = li[0]
    if elem - 2 == 2:
        print("True", li[0])
    else:
        li.pop(0)
        miFuncion(li)

miFuncion(lista)
Войдите в полноэкранный режим Выход из полноэкранного режима

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

  • Оно обозначается n! и читается как «факториал n».
  • Оно соответствует произведению целых положительных чисел от единицы до n включительно, т.е:
n! = 1 * 2 * 3 * ... (n-2)*(n-1)*n
Войдите в полноэкранный режим Выход из полноэкранного режима

Примеры:
a) 3! = 3 * 2 * 1 = 6
b) 5! = 5 * 4 * 3 * 2 * 1 = 120
c) 6! = 6 * 5! = 6 * 120 = 720

Хорошо, теперь, когда мы поняли функцию факториала, давайте запрограммируем ее:

def factorial(num):
   if num == 1:
       return num
   else:
       return num*factorial(num-1)
Войдите в полноэкранный режим Выход из полноэкранного режима

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

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

Я надеюсь, что это руководство будет полезным, если у вас есть вопросы, оставляйте их в комментариях, и я с удовольствием прочитаю их и постараюсь продолжить объяснение или обучение 😀

Оцените статью
devanswers.ru
Добавить комментарий