Основная идея здесь - использовать рекурсию вместо цикла для чтения и записи символов. Ведь для того, чтобы вывести N чисел в порядке, обратном чтению, нужно сначала вывести N-1 последнее число в обратном порядке, а затем - первое. Продолжая аналогию, доходим до N = 1, в этом случае просто выводим число.
В псевдокоде идея выглядит так:
функция вывести_N_чисел_в_обратном_порядке(N)
x = прочитать_число()
если N > 1
вывести_N_чисел_в_обратном_порядке(N - 1)
вывести_число(x)
Основной трюк здесь - хранение прочитанных чисел в стеке вызовов, что позволяет, во-первых, обойтись без явного объявления массива, а во-вторых, вытаскивать числа в порядке, обратном записи.