Алгоритмы и рекурсия · тема 3 из 8

Число программ исполнителя

Исполнитель · 2027 №13 / 2026 №23

01 · Пойми идею

Одна идея — один пример

Состояние — текущее число. Количество путей в состояние можно складывать из предыдущих состояний. Это динамическое программирование.

ways = [0] * 5
ways[1] = 1
for x in range(2, 5):
    ways[x] = ways[x - 1]
    if x % 2 == 0: ways[x] += ways[x // 2]
print(ways[4])

02 · Добавь следующий шаг

Теперь решаем самостоятельно

Если команды одинаково меняют число, программы всё равно различны, когда различаются команды. Запрещённому состоянию присваивают 0 путей.

Твоя задача

Вводится n от 2 до 30. Исполнитель начинает с 1, команды +1 и ×2. Выведи число разных программ, приводящих к n.

Пример входных данных и результата

Ввод:

2

Вывод:

2
Черновик и файл программы

Черновик сохраняется в этом браузере. Ctrl/⌘ + S — сохранить.

Результаты проверки

Напиши решение и нажми «Проверить код». Данные каждого теста подаются автоматически.

    Нужна подсказка?

    К x приходят из x-1 и, если x чётное, из x//2.

    На чём легко ошибиться

    Не прибавляй путь из x//2 для нечётного x.

    Разобрать один из способов решения

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

    n = int(input())
    ways = [0] * (n + 1)
    ways[1] = 1
    for x in range(2, n + 1):
        ways[x] = ways[x - 1]
        if x % 2 == 0: ways[x] += ways[x // 2]
    print(ways[n])

    Тесты проверяют результат на учебных примерах, но не доказывают правильность для любого входа. Объясни каждую строку и предложи собственный тест.

    03 · Закрепи

    Перед следующей темой

    Назови входные данные, результат, основной шаг алгоритма и граничный случай. Если использовал разбор, напиши решение заново. Для свободных экспериментов открой Python онлайн.

    Все темы этого курса
    1. Функция и возврат результата
    2. Рекурсия с базовым случаем
    3. Число программ исполнителя
    4. Игры: «есть ход» и «любой ход»
    5. Зависимости процессов
    6. Координаты вместо картинки
    7. Кванторы на конечной модели
    8. Исполнитель как состояние и лента

    Программа подготовлена по темам банка «Академии С». Официальные документы: ФИПИ. Справочник языка: Python. Не все экзаменационные задачи нужно решать программой: например, работа в таблицах требует освоения табличного редактора.