Исполнитель Крабоед преобразует число, записанное на экране. У исполнителя есть команды, которым присвоены номера:
1. Прибавить ,
2. Прибавить .
Первая команда увеличивает число на экране на , вторая — увеличивает на
. Программа для исполнителя Крабоед — это последовательность команд. Сколько существует программ, для которых при исходном числе
результатом является число
?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы при исходном числе
траектория будет состоять из чисел
Решение рекурсией:
def f(a, b):
if a > b:
return 0
if a == b:
return 1
return f(a + 1, b) + f(a + 2, b)
print(f(1, 10))
Решение динамикой:
a = [0] * 1000
a[1] = 1
for i in range(10):
a[i+1] += a[i]
a[i+2] += a[i]
print(a[10])