Всё упирается в вопросы, что считать циклом и что считать программой. Например, обычно рекурсию за цикл не считают. С другой стороны, на архитектуре с конечной памятью бесконечная рекурсия невозможна: стек переполнится. С третьей стороны, есть т.н. хвостовая рекурсия, которая может на низком уровне оптимизироваться фактически в цикл, однако на верхнем уровне абстракции цикла как бы нет.
Если всякую программу, в которой возможно (количественно неограниченное) выполнение одного и того же элемента (оператора, команды, инструкции или как ещё там может это называться?) считать имеющей цикл, то очевидно, конечная программа без циклов всегда будет заканчиваться.
Если называть "бесконечным циклом" такой процесс, при котором в некоторый момент времени состояние программы (текущий оператор, содержимое памяти и т.п.) полностью идентично состоянию в некоторый предыдущий момент времени, а поведение программы полностью детерминировано её состоянием, то тоже достаточно легко показать, что на машине с конечной памятью любая программа либо остановится, либо войдёт в "бесконечный цикл". Для абстрактных архитектур с неограниченной памятью может быть конечная программа без такого "бесконечного цикла", которая не закончится:
n := 1;
while n > 0 do
Inc(n);
Если здесь допустить, что n может принимать
любые целые значения (никаких ограничений), то такая абстрактная программа не закончится никогда, тем не менее, состояние программы никогда не повторится (n будет каждый раз разным).
[Upd]
General привёл другой пример реальной программы, в которой в некотором смысле нет "бесконечного цикла", тем не менее, она никогда не закончится. Но только если считать, что генератор случайных чисел Random() истинно случаен. Есть реальные архитектуры, в которых имеются истинно случайные ГСЧ. В этих архитектурах поведение программы
не детерминировано её состоянием. Однако могут найтись исследователи, которые откажут таким программам в праве называться истинными программами...