Главный вопрос: как после "111" программа переходит к "112"?
Ключевая идея: Цикл НЕ исчезает, когда мы уходим в рекурсию! Он ждёт. Когда рекурсия вернётся, цикл продолжится со следующей цифры.
Шаг 1: СоставьЧисла("", 3)
Цикл: цифра = 1
Запоминаем: "потом попробую 2 и 3"
Вызываем: СоставьЧисла("1", 2)
Шаг 2: СоставьЧисла("1", 2)
Цикл: цифра = 1
Вызываем: СоставьЧисла("11", 1)
Шаг 3: СоставьЧисла("11", 1)
Цикл: цифра = 1
Вызываем: СоставьЧисла("111", 0)
Шаг 4: СоставьЧисла("111", 0)
сколько_осталось = 0 → ВЫВОДИМ "111"
ВЫХОДИМ
Шаг 5: Вернулись в СоставьЧисла("11", 1)
Цикл продолжается: цифра = 2
Вызываем: СоставьЧисла("112", 0)
Шаг 6: ВЫВОДИМ "112", ВЫХОДИМ
Шаг 7: Цикл продолжается: цифра = 3
→ ВЫВОДИМ "113"
Шаг 8: Цикл закончился → ВЫХОДИМ
Шаг 9: Вернулись в СоставьЧисла("1", 2)
Цикл продолжается: цифра = 2
→ переходим к "12..." → "121", "122", "123"
Запомни: Возврат происходит автоматически, когда функция заканчивается. Цикл «вспоминает», где остановился, и продолжает работу.