№16 · решено
Три функции
Алгоритм вычисления функций Q(n), G(n) и H(n) задан соотношениями: Q(n) = 1, если n ≥ 3000; Q(n) = Q(n + 1) + 2, если n < 3000; G(n) = n, если n ≤ 3; G(n) = G(n − 1) + (остаток от деления Q(2 · n) на 5), если n > 3; H(n) = 1, если n ≤ 2; H(n) = H(n − 1) + G(n) − (остаток от деления Q(n) на 3), если n > 2. Чему равно значение H(2000)?
Учебная задача
Ответвпиши то, что вывела программа
Показать разбор
- Перепиши три функции из условия и поставь на каждую @lru_cache(None).
- Определи порядок прогрева: сначала та функция, на которую опираются остальные. Здесь это Q, потом G, потом H.
- Q смотрит вверх, поэтому греем её по убыванию, от 3000 до 1.
- G и H смотрят вниз, поэтому греем их по возрастанию, от 1 до 2000.
- Напечатай H(2000).
from functools import lru_cache
@lru_cache(None)
def Q(n):
if n >= 3000:
return 1
return Q(n + 1) + 2
@lru_cache(None)
def G(n):
if n <= 3:
return n
return G(n - 1) + Q(2 * n) % 5
@lru_cache(None)
def H(n):
if n <= 2:
return 1
return H(n - 1) + G(n) - Q(n) % 3
for n in range(3000, 0, -1):
Q(n)
for n in range(1, 2001):
G(n)
for n in range(1, 2001):
H(n)
print(H(2000))