Вариант 1.
def f(x, y):
if x==y:
return 1
if x>y or x==47:
return 0
if x<y:
return f(x+1,y) +f(x*2,y)
print(f(2,12)*f(12,50))
Вариант 2.
Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
Прибавить 1
Умножить на 2
Умножить на 3
Первая команда увеличивает число на экране на 1, вторая умножает его на 2, третья — умножает на 3. Программа для исполнителя — это последовательность команд.
Сколько существует программ, которые преобразуют исходное число 2 в число 36, и при этом траектория вычислений содержит число 12 и не содержит числа 30?
def numProg(start, x):
if x < start or x == 30:
return 0
if x == start:
return 1
k = numProg(start, x-1)
if x % 2 == 0:
k += numProg(start, x//2)
if x % 3 == 0:
k += numProg(start, x//3)
return k
# Умножаем количество маршрутов 2->12 на 12->36 (комбинаторика)
print(numProg(2, 12) * numProg(12, 36))
Вариант 3.
def f(n, m): if n==m: return 1 elif n>m: return 0 else: return f(n+1,m)+f(n*2,m) print(f(1,10)*f(10,20))
Вариант 4.
def f(x, y):
if x==y:
return 1
if x>y:
return 0
if x<y:
return (f(x+1,y) +f(x+2,y) +f(x*2,y))
print(f(3,10)*f(10,13))