Задача № 6641
Задание КИМ № 16: Вычисление значения рекурсивной функции
Раздел № 44: Вычисление значения рекурсивной функции
(Е. Джобс) Алгоритм вычисления функций F(n) и G(n), где n – натуральное число, задан следующими соотношениями:
F(n) = 1 , если n ≥ 3210, G(n) = n, если n < 10. F(n) = F(n+3) + 7, если n<3210, G(n) = G(n–3) + 5, если n ≥ 10.
Чему равно значение выражения F(15) – G(3000)? |
Решим на Python
from sys import *
setrecursionlimit(4000)
def f(n):
if n >= 3210: return 1
return f(n+3)+7
def g(n):
if n < 10: return n
if n>= 10: return g(n-3)+5
print(f(15) - g(3000))
Решение на Языке Python с использованием кеширования
from functools import *
@lru_cache(None)
def f(n):
if n >= 3210: return 1
return f(n+3)+7
@lru_cache(None)
def g(n):
if n < 10: return n
if n>= 10: return g(n-3)+5
for i in range(3215, 1, -1):
f(i)
for i in range(0, 3200):
g(i)
print(f(15) - g(3000))
Ответ:
2462