Python
# Базовый
def f(x, y):
if x > y: return 0
if x == y: return 1
return f(x+1, y) + f(x*2, y)
# Промежуточные числа — перемножаем
print(f(4,8) * f(8,10) * f(10,15))
# С ограничением (запрет числа)
def f(x, y):
if x < y or x == 20: return 0
if x == y: return 1
return f(x-2, y) + f(x-3, y) + f(x//5, y) Способ 2
# С последней командой
def f(x, y, z):
if x > y: return 0
if x == y and z[-1] == 'A': return 1
if x == y: return 0
return f(x+2,y,z+'A') + f(x+3,y,z+'B')
# Не более K команд подряд
from functools import lru_cache
@lru_cache(None)
def f(x, y, last, cnt):
if x > y: return 0
if x == y: return 1
r = 0
for cmd, nx in [('A', x+1), ('B', x*2)]:
c = cnt+1 if cmd == last else 1
if c <= 3: # не более 3 подряд
r += f(nx, y, cmd, c)
return r 📚 Теория
Подсчёт траекторий. Рекурсия с мемоизацией.