Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
-
Прибавить 1
-
Прибавить 2
-
Умножить на 2
Первая команда увеличивает число на экране на 1, вторая увеличивает его на 2, третья — умножает на 2. Программа для исполнителя — это последовательность команд.
Сколько существует программ, которые преобразуют исходное число 1 в число 11 и при этом не содержат двух команд умножения подряд?
Решение:
Решение на Python:
def F(x, y, last):
if x > y:
return 0
if x == y:
return 1
s = F(x + 1, y, 0) + F(x + 2, y, 0)
if last == 0:
s += F(x * 2, y, 1)
return s
print(F(1, 11, 0))
Ответ: 213
Ответ:
213