Бесконечный цикл
Бесконечный цикл — это выполнение команд, которое повторяется без остановки, потому что условие выхода никогда не становится истинным или выход из цикла недостижим. Чтобы обнаружить зацикливание, анализируют циклический алгоритм, его условие цикла и изменение переменных на каждой итерации.
Почему цикл не завершается
Чаще всего причина связана с переменной, от которой зависит условие. Она может совсем не изменяться, изменяться в неправильную сторону или получать прежнее значение. Зацикливание также возникает, если условие всегда истинно, например \(x \ge 0\) при неизменном неотрицательном \(x\), либо если внутри цикла есть переход назад, делающий команды после него недостижимыми.
В цикле while x < 10 переменная \(x\) сначала равна 0, но внутри цикла не изменяется. Условие \(x < 10\) остаётся истинным при каждом повторении, поэтому цикл не остановится. Если добавить команду \(x := x + 1\), после десяти повторений условие станет ложным.
Бесконечный цикл — не то же самое, что просто длинный цикл. Длинный цикл завершится после конечного числа шагов, а при зацикливании конечное число повторений не установлено. Также остановка из-за ошибки программы не является нормальным завершением цикла.
Как обнаружить зацикливание
Проверьте, существует ли путь к команде выхода и меняется ли величина, влияющая на условие. Для числового счётчика удобно определить направление изменения: если условие требует \(x < b\), счётчик должен расти до \(b\); если требуется \(x > b\), он должен уменьшаться. В задачах об исполнителе полезно отслеживать его состояние: положение, значения переменных и истинность условия после каждой итерации.
Почему цикл while x != 5 может стать бесконечным, если после шага к \(x\) прибавляют 2, а начальное значение \(x=0\)?
Главное
- Бесконечный цикл не достигает условия остановки и повторяет команды бесконечно.
- Ищите неизменную или неправильно изменяемую переменную и проверяйте, достижимо ли значение выхода.
- Длинный, но конечный цикл отличается от зацикливания тем, что всё-таки завершается.