Ответ
Итерация — это многократное выполнение блока кода с использованием циклов (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).