Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавь 1
2. Прибавь 2
3. Умножь на 2
Первая команда увеличивает число на экране на 1, вторая увеличивает его на 2, третья — умножает на 2. Программа для исполнителя — это последовательность команд. Сколько существует программ, которые преобразуют исходное число 2 в число 22 и при этом не содержат двух команд «Прибавить 2» подряд?
Приведём решение на языке Python.
def F(s, st=''):
if s > 22 or st[-2:] == '22':
return 0
if s == 22:
return 1
return F(s+1, st+'1') + F(s+2, st+'2') + F(s*2, st+'3')
print(F(2))
Ответ: 4953.
Приведём решение Даниила Артюхина на языке Python.
def F(x, end, s = 0):
if x == end:
return 1
if x> end:
return 0
if s != 2:
return F(x+1, end, 1) + F(x+2, end, 2) + F(x*2, end, 3)
else:
return F(x+1, end, 1) + F(x*2, end, 3)
print(F(2, 22))

