С точки зрения компилятора циклы делятся на сводимые и несводимые. Cводимый цикл с одной головой - одним и тем же "местом" в программе (головой CFG-графа в IR) - для обратных дуг и прелупа.
С точки зрения "современной теории программирования" - циклы делятся на (в порядке "увеличения императивности") на:
чисто функциональные (map / reduce / flatmap / fold*)
итерируемые по коллекциям (iterable \ traversable - по разному их называют)
остальные.
Если вы сдаёте ЯП, то вероятно преподаватель от вас спрашивает что-то типа: