2302.py

Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера: Прибавь 2. Умножь на 2. Первая из них увеличивает число на экране на 2, вторая увеличивает число на экране в два раза. Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 1 результатом является число 52, и при этом траектория вычислений содержит число 18? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 3 траектория будет состоять из чисел 5, 10, 12.
"""
Исполнитель преобразует число на экране.

У исполнителя есть две команды, которым присвоены номера:

    Прибавь 2.
    Умножь на 2.

Первая из них увеличивает число на экране на 2, 
вторая увеличивает число на экране в два раза.

Программа для исполнителя – это последовательность команд.

Сколько существует программ, 
для которых при исходном числе 1 результатом является число 52, 
и при этом траектория вычислений содержит число 18?

Траектория вычислений программы — это последовательность 
результатов выполнения всех команд программы. 
Например, для программы 121 при исходном числе 3 траектория будет состоять из чисел 5, 10, 12.
"""

def F(s, end):
    if s == end: return 1
    if s > end:  return 0
    return F(s + 2, end) + F(s * 2, end)

print(F(1, 18) * F(18, 52))
"""
Исполнитель преобразует число на экране.

У исполнителя есть две команды, которым присвоены номера:

    Прибавь 2.
    Умножь на 2.

Первая из них увеличивает число на экране на 2, 
вторая увеличивает число на экране в два раза.

Программа для исполнителя – это последовательность команд.

Сколько существует программ, 
для которых при исходном числе 1 результатом является число 52, 
и при этом траектория вычислений содержит число 18?

Траектория вычислений программы — это последовательность 
результатов выполнения всех команд программы. 
Например, для программы 121 при исходном числе 3 траектория будет состоять из чисел 5, 10, 12.
"""

def F(s, end):
    if s == end: return 1
    if s > end:  return 0
    return F(s + 2, end) + F(s * 2, end)

print(F(1, 18) * F(18, 52))

Репозиторий на GitHub