Задание 23. Информатика. Статград 2023-2-2

Просмотры: 289
Изменено: 25 ноября 2024

Исполнитель преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера:

  1. Прибавить \(1\)
  2. Умножить на \(2\)
Первая команда увеличивает число на экране на \(1\), вторая умножает его на \(2\).
Программа для исполнителя — это последовательность команд. Например, если в начальный момент на экране находится число \(1\), то программа \(212\) последовательно преобразует его в \(2\), \(3\), \(6\).
Сколько существует программ, для которых преобразуют исходное число \(1\) в число \(16\), и при этом никакая команда не повторяется более двух раз подряд?

Решение:

Python


def F(n, target, com1, com2):
    if com1 > 2 or com2 > 2 or n > target:
        return 0
    if n == target:
        return 1
    return F(n+1, target, com1+1, 0) + F(2*n, target, 0, com2+1)

print(F(1, 16, 0, 0))

Ответ: \(5\)