Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены буквами:
A. Вычесть 1
B. Умножить на 2
C. Умножить на 3
Программа для исполнителя — это последовательность команд. Например, программа BAC при исходном числе 2 последовательно получит числа 4, 3, 9.
Сколько существует программ, которые преобразуют исходное число 3 в число 20 и при этом не содержат двух команд A подряд?
Решение:
Решение на Python:
def F(x, y, last):
if x < 1 or x > y + 1:
return 0
if x == y:
return 1
s = 0
if last != 'A':
s += F(x - 1, y, 'A')
s += F(x * 2, y, 'B')
s += F(x * 3, y, 'C')
return s
print(F(3, 20, ''))
Ответ: 4
Ответ:
4