Чем рекурсия отличается от итерации

Ответ

Итерация — это многократное выполнение блока кода с использованием циклов (for, while). Состояние изменяется на каждой итерации через переменные-счетчики или итераторы.

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

Сравнительная таблица:

Характеристика Итерация Рекурсия
Механизм Циклы (for, while) Вызов функцией самой себя
Память Константная (O(1)) Растет с глубиной (O(n)), использует стек вызовов
Производительность Обычно быстрее Медленнее из-за накладных расходов на вызов функций
Риск Бесконечный цикл Переполнение стека (StackOverflowError)
Читаемость кода Проще для линейных задач Элегантнее для древовидных структур

Пример (вычисление факториала):

# Итеративный подход
def factorial_iterative(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

# Рекурсивный подход
def factorial_recursive(n):
    # Базовый случай для остановки рекурсии
    if n == 0:
        return 1
    # Рекурсивный вызов
    return n * factorial_recursive(n - 1)

Когда что использовать:

  • Итерация: Предпочтительна для большинства задач из-за производительности и безопасности. Идеальна для простого перебора коллекций и линейных вычислений.
  • Рекурсия: Незаменима для задач, имеющих рекурсивную природу. Примеры: обход деревьев и графов (DFS), задачи «разделяй и властвуй» (например, быстрая сортировка), парсинг вложенных структур (JSON).