ты просто думаешь, что у тебя все данные есть, а в реальном мире у тебя может не быть всех данных
простейший пример - возьми си, там стандартные 0-terminated строки, как их вывести через for? никак, у тебя неизвестна длина строки, и вообще неизвестно, заканчивается строка или нет.
ну, подумаешь - зависнет прога или упадет с запретом доступа к памяти
через рекурсию можно развернуть алгоритм такой