№16 · решено
две функции
Алгоритм вычисления значений функций F(n) и G(n), где n — целое число, задан соотношениями: F(n) = 3 × G(n − 3) + 7; G(n) = n + 2, если n ≤ 20; G(n) = G(n − 3) + 1, если n > 20. Чему равно значение F(37811)?
Источник: ФИПИ (банк), № 29970
Ответвпиши то, что вывела программа
Показать разбор
- Перепиши обе функции из условия и поставь на них @lru_cache(None).
- G спускается с шагом 3 от большого числа, поэтому без прогрева будет слишком глубокая рекурсия.
- Прогрей G по возрастанию, от 1 до 37808: столько нужно для F(37811).
- Напечатай F(37811).
from functools import lru_cache
@lru_cache(None)
def F(n):
return 3 * G(n - 3) + 7
@lru_cache(None)
def G(n):
if n <= 20:
return n + 2
if n > 20:
return G(n - 3) + 1
for n in range(1, 37809):
G(n)
print(F(37811))