Мини-урок · перед практикой

Разворот последовательности

Печатаем число после рекурсивной обработки остатка.

Как к ней подойти

Потренируйтесь выделять повторяющуюся логику в функцию и находить условие остановки рекурсии.

Коротко о теме

Функция получает аргументы и возвращает результат через return. Рекурсия разбивает задачу на меньшую такую же задачу; без базового случая вызовы не остановятся. Проверьте, что каждый шаг действительно приближает к нему.

Ключевая идея · Один элемент на вызов

Стек сохраняет прочитанные числа; возвраты идут в обратном порядке. Ноль тоже печатается.

Проверьте перед запуском

  • Ноль входит в вывод. Глубина рекурсии ограничивает оба варианта; массивы не используются.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Один элемент на вызов

Стек сохраняет прочитанные числа; возвраты идут в обратном порядке. Ноль тоже печатается.

def reverse():
    x = int(input())
    if x != 0:
        reverse()
    print(x)

reverse()

Время: O(n). Память: O(n) стек.

Другой способ: Два элемента на вызов

Каждый вызов хранит до двух чисел в отдельных переменных. Сначала выводим продолжение, затем второе и первое; глубина примерно вдвое меньше.

def reverse():
    first = int(input())
    if first == 0:
        print(0)
        return
    second = int(input())
    if second == 0:
        print(0)
    else:
        reverse()
    if second != 0:
        print(second)
    print(first)
reverse()

Время: O(n). Память: O(n) стек.