Menu
Coddy logo textTech

Что такое итерация?

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

Автор: Kevin Spektor, Сооснователь и CTO

Обновлено 24 сентября 2026 г.

Программа, которая отправляет письмо с напоминанием 10 000 пользователей, не содержит 10 000 копий кода отправки. Она содержит этот код один раз, внутри цикла, и цикл выполняет его по разу для каждого пользователя. Каждое выполнение является одной итерацией, а цикл целиком и есть то, как программа перебирает (итерирует) своих пользователей.

Как работает итерация, шаг за шагом

Каждый цикл следует одному и тому же порядку:

  1. Проверка. Проверить условие цикла, которое является boolean: есть ли ещё элемент, не достиг ли счётчик предела?
  2. Выполнение. Если ответ истинный, выполнить тело цикла один раз.
  3. Обновление. Перейти к следующему элементу или изменить счётчик.
  4. Повторение. Вернуться к шагу 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, который снова и снова просит пароль, пока не введут правильный, тоже является итерацией, хотя число проходов заранее неизвестно.
Что лучше, рекурсия или итерация?
В общем случае ни то ни другое. Итерация использует фиксированный объём памяти и обычно быстрее для простого повторения, например суммирования списка или подсчёта. Рекурсия даёт более короткий и понятный код для задач, рекурсивных по своей природе, например обхода дерева папок, но каждый вызов занимает память стека, и очень глубокая рекурсия в языках вроде Python завершается ошибкой.
Итерация и цикл означают одно и то же?
Почти. Цикл является конструкцией языка, например for или while, а итерация является повторением, которое он выполняет. Один проход по телу цикла тоже называется итерацией, поэтому цикл, который выполняется 5 раз, делает 5 итераций.
Чем спринт отличается от итерации?
В управлении программными проектами итерация представляет собой фиксированный период, обычно от одной до четырёх недель, за который команда планирует, создаёт и проверяет часть работающей программы. В Scrum такой период называется спринтом, так что на практике эти два слова означают одно и то же. Это другое значение, чем итерация в коде.
Что означает «итерируемый»?
Итерируемым (iterable) называют любой объект, который можно обойти циклом for: список, строку, словарь, файл или range. В Python объект итерируемый, если iter() может получить из него итератор. Целые числа не итерируемые, поэтому for x in 5: вызывает TypeError.
Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ