Что такое итерация?
В программировании итерация означает повторение набора инструкций, обычно с помощью цикла, пока не выполнится условие или пока не будет обработан каждый элемент коллекции. Каждый отдельный проход по повторяемым инструкциям тоже называется итерацией.
Обновлено 24 сентября 2026 г.
Программа, которая отправляет письмо с напоминанием 10 000 пользователей, не содержит 10 000 копий кода отправки. Она содержит этот код один раз, внутри цикла, и цикл выполняет его по разу для каждого пользователя. Каждое выполнение является одной итерацией, а цикл целиком и есть то, как программа перебирает (итерирует) своих пользователей.
Как работает итерация, шаг за шагом
Каждый цикл следует одному и тому же порядку:
- Проверка. Проверить условие цикла, которое является boolean: есть ли ещё элемент, не достиг ли счётчик предела?
- Выполнение. Если ответ истинный, выполнить тело цикла один раз.
- Обновление. Перейти к следующему элементу или изменить счётчик.
- Повторение. Вернуться к шагу 1. Когда проверка даёт ложь, программа продолжает выполнение с кода после цикла.
Здесь тело выполняется пять раз, и на каждой итерации к накопленной сумме прибавляется следующее число:
iteration 1 total is now 1
iteration 2 total is now 3
iteration 3 total is now 6
iteration 4 total is now 10
iteration 5 total is now 15
Done: 15
Переменная total находится вне цикла, поэтому сохраняет значение от одной итерации к другой. Такой приём, переменная, заданная до цикла и обновляемая внутри него, называется аккумулятором, и он встречается почти в каждом цикле, который что-то вычисляет.
Циклы со счётчиком и циклы с условием
Итерация бывает двух видов. Определённая итерация выполняется известное число раз: по разу для каждого элемента списка или для каждого числа от 1 до 5. Цикл for в Python создан для этого, часто вместе с range().
Неопределённая итерация повторяется, пока что-то не произойдёт, и число проходов заранее неизвестно. Для этого подходит цикл while:
8 years, balance 214.36
Деньги, которые растут на 10% в год, удваиваются за 8 лет. Программа выяснила это перебором, а не решением уравнения. Руководства циклы for и циклы while разбирают оба вида в Python.
Обход коллекции
Большинство циклов проходят по коллекции: элементам массива, символам строки, строкам файла. Цикл for в Python выдаёт каждый элемент напрямую, а enumerate() добавляет его позицию:
0 apple
1 banana
2 cherry
За кулисами for запрашивает у коллекции итератор через iter(), а затем вызывает у него next() по разу на каждой итерации. Те же вызовы можно сделать самому:
red
green
blue
no more items
Без значения по умолчанию четвёртый next() вызывает StopIteration. По этому исключению цикл for понимает, что коллекция закончилась.
В других языках та же идея записывается по-другому. В C считают с помощью индекса, а в Java и JavaScript есть и цикл, который выдаёт каждый элемент:
for (int i = 0; i < 3; i++) {
printf("%s\n", colors[i]);
}
for (String color : colors) {
System.out.println(color);
}
for (const color of colors) {
console.log(color);
}
Итерация и рекурсия
Рекурсия является другим способом повторять работу: функция вызывает саму себя для меньшей версии задачи, пока не дойдёт до случая, на который может ответить сразу. Всё, что написано одним способом, можно написать и другим, но ведут они себя по-разному:
| Итерация | Рекурсия | |
|---|---|---|
| Как повторяется | Цикл возвращается к своему началу | Функция вызывает саму себя |
| Когда останавливается | Условие цикла становится ложным | Достигнут базовый случай |
| Память | Одинаковый объём при любом числе проходов | Один кадр стека на каждый ещё не завершённый вызов |
| Типичный сбой | Бесконечный цикл | Переполнение стека (RecursionError в Python) |
| Где уместна | Списки, счётчики, повторение до выполнения условия | Деревья, вложенные данные, «разделяй и властвуй» |
Строка про память важна на практике. Python по умолчанию допускает около 1000 вложенных вызовов, поэтому рекурсивная сумма 5000 чисел завершается ошибкой там, где цикл справляется без проблем:
5050 5050
12502500
sum_recursive(5000) failed: RecursionError
Визуализация рекурсии показывает, как стек вызовов растёт и уменьшается шаг за шагом.
Частые ошибки
Бесконечный цикл. Цикл while, условие которого никогда не становится ложным, работает, пока ты не остановишь программу. Обычная причина в забытом шаге обновления, например пропущенной строке count = count - 1.
Ошибка на единицу. range(1, 5) даёт 1, 2, 3 и 4, но не 5, потому что конечное значение не включается. Цикл, который выполняется на один раз больше или меньше, чем нужно, всё равно работает без ошибки и даёт неверный ответ: это логическая ошибка.
Изменение списка во время его обхода. Если удалять элементы из списка, по которому идёт цикл, цикл пропускает элементы:
[1, 2, 3]
Одна двойка уцелела, потому что удаление первой двойки сдвинуло вторую на позицию, которую цикл уже прошёл. Вместо этого создай новый список: numbers = [n for n in numbers if n != 2].
Что изучить дальше
Циклы обходят коллекции, поэтому страница что такое массив станет естественным дополнением, а что такое boolean объясняет проверки на истину и ложь, которые решают, когда цикл остановится. Если цикл даёт неверный результат без сообщения об ошибке, прочитай, что такое логическая ошибка. Чтобы потренироваться писать циклы, начни курс Python или попробуй примеры выше в песочнице Python.
Часто задаваемые вопросы
Какой пример итерации можно привести?
for, который выводит каждое имя из списка 100 пользователей, выполняет 100 итераций, по одной на имя. Цикл while, который снова и снова просит пароль, пока не введут правильный, тоже является итерацией, хотя число проходов заранее неизвестно.Что лучше, рекурсия или итерация?
Итерация и цикл означают одно и то же?
for или while, а итерация является повторением, которое он выполняет. Один проход по телу цикла тоже называется итерацией, поэтому цикл, который выполняется 5 раз, делает 5 итераций.Чем спринт отличается от итерации?
Что означает «итерируемый»?
for: список, строку, словарь, файл или range. В Python объект итерируемый, если iter() может получить из него итератор. Целые числа не итерируемые, поэтому for x in 5: вызывает TypeError.