Алгоритм вычисления значения функций F(n) и G(n), где n — целое число, задан следующими соотношениями:
F(n) = F(n – 5) + 5580, если n ≥ 25;
F(n) = 12 × (G(n – 11) – 14), если n < 25;
G(n) = n/6 + 34, если n ≥ 395 881;
G(n) = 13 + G(n + 39), если n < 395 881.
Чему равно значение функции F(937)?
Приведём решение на языке Python.
from functools import *
def f(n):
if n >= 25:
return f(n-5) + 5580
else:
return 12*(g(n - 11) - 14)
@lru_cache()
def g(n):
if n >= 395881:
return n/6 + 34
else:
return 13 + g(n + 39)
for n in range(400000,1,-1):
g(n)
print(f(937))
Ответ: 3396736.
Приведём решение Юрия Красильникова на языке Python.
f,g={},{}
for n in range(400000,-1,-1):
g[n] = n/6+34 if n >= 395881 else 13+g[n+39]
for n in range(12,1000):
f[n] = f[n-5]+5580 if n >= 25 else 12*(g[n-11]-14)
print(f[937])

