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

Рекурсия – это когда функция вызывает саму себя. Логика рекурсивной функции, как правило, состоит из двух ветвей.

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

Короткая ветвь определяет критерий выхода из рекурсии.

Oct. 12, 2023, Источник

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

deffactorial(n):
# терминальное условие, которое остановит рекурсию
	if n<= 0:
	return 1
# рекурсивный вызов
return n* factorial(n- 1)

factorial(5)
# 120
# тоже самое, что 5 * 4 * 3 * 2 * 1

 

Oct. 12, 2023, Источник

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

Принцип работы

Состоит из двух частей:

1. Базовый случай: Условие, при котором рекурсия прекращается, чтобы избежать бесконечного цикла вызовов.
2. Рекурсивный случай: Вызов функции самой себей с измененными параметрами.

Пример:

Простым примером может служить функция вычисления факториала числа `n`, где факториал `n` (обозначается как `n!`) — это произведение всех натуральных чисел от 1 до `n`.

def factorial(n):
    if n == 1:  # Базовый случай
        return 1
    else:  # Рекурсивный случай
        return n * factorial(n - 1)

В этом примере, если `n` не равно 1, функция вызывает сама себя с параметром `n-1`. Эти вызовы продолжаются, пока `n` не достигнет 1, после чего вызовы начинают возвращаться обратно, последовательно умножая числа.

Преимущества и недостатки

Преимущества:

  • Упрощает решение сложных задач, разбивая их на более мелкие.
  • Облегчает чтение и понимание кода при решении определенных типов задач.

Недостатки:

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

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

Feb. 22, 2024, easyoffer