КЕГЭ № 10718 (Уровень: Средний)
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = 2 при n < 3;
F(n)= 2 × F(n−2) − F(n−1) + 2, если n > 2 и при этом n чётно;
F(n) = 2 × F(n−1) + F(n−2) − 2, если n > 2 и при этом n нечётно.
Чему равно значение функции F(170)?
Комментарии к коду решения:
from functools import *
- Подключение модуляfunctools
для использования декоратораlru_cache
.@lru_cache(None)
- Применение декоратораlru_cache
для кэширования результатов функцииf
и установки размера кэша как неограниченный.def f(n):
- Объявление функцииf
с аргументомn
.if n < 3:
- Если значениеn
меньше 3, выполнить следующий блок кода.return 2
- Вернуть значение 2.if n > 2 and n % 2 == 0:
- Если значение n больше 2 и остаток от деления на 2 равен 0, выполнить следующий блок кода.return 2 * f(n-2) - f(n-1) + 2
- Вернуть результат выражения2 * f(n-2) - f(n-1) + 2
.if n > 2 and n % 2 != 0:
- Если значениеn
больше 2 и остаток от деления на 2 не равен 0, выполнить следующий блок кода.return 2 * f(n-1) + f(n-2) - 2
- Вернуть результат выражения2 * f(n-1) + f(n-2) - 2
.print(f(170))
- Вывести результат вызова функцииf
с аргументом 170 на экран.
from functools import *
@lru_cache(None)
def f(n):
if n < 3:
return 2
if n > 2 and n % 2 == 0:
return 2 * f(n-2) - f(n-1) + 2
if n > 2 and n % 2 != 0:
return 2 * f(n-1) + f(n-2) - 2
print(f(170))
В данном коде @lru_cache(None)
используется для кэширования результатов функции f(n)
с помощью декоратора lru_cache
из модуля functools
.
Аргумент None
указывает, что размер кэша неограничен.
Кэширование функции позволяет избежать повторных вычислений для одних и тех же входных данных.
При первом вызове функции f(n)
результат сохраняется в кэше. При последующих вызовах функции с тем же аргументом, результат будет возвращен из кэша, вместо повторного выполнения вычислений.
Таким образом, в данном коде использование @lru_cache(None)
позволяет сэкономить время на вычислениях, так как функция f(n)
будет выполняться только один раз для каждого уникального аргумента.