Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n × F(n-1), если n > 1.
Чему равно значение выражения (2 × F(2024) + F(2023)) / F(2022)?
Ответ:
ЕГЭ по информатике Основная волна 07.06.2024 kompege.ru – задание №16
Решение:
ИЛИ
|
1 2 3 4 5 6 7 8 9 10 |
from functools import lru_cache @lru_cache(None) def f(n): if n==1: return 1 if n>1: return n*f(n-1) for i in range(1, 2025): f(i) print((2*f(2024)+f(2023))/f(2022)) |
Объяснение кода:
- Импортирование модуля
functools:
1from functools import lru_cache
Импортируем функциюlru_cacheиз модуляfunctools, которая позволяет кэшировать результаты вычислений для оптимизации. - Определение функции
f(n)с использованием кэширования:
123456@lru_cache(None)def f(n):if n == 1:return 1if n > 1:return n * f(n-1)
Используем декоратор@lru_cache(None)для кэширования результатов вызовов функцииf.Функция
fвычисляет значение функцииF(n)согласно заданным условиям:- Если
n == 1, возвращаем 1. - Если
n > 1, возвращаемn * f(n-1).
- Если
- Вычисление значений функции для всех
nот 1 до 2024:
12for i in range(1, 2025):f(i)
Итеративно вызываем функциюfдля всех значенийiот 1 до 2024, чтобы заполнить кэш значениями функции. - Вычисление и вывод результата:
1print((2 * f(2024) + f(2023)) / f(2022))
Вычисляем значение выражения(2 * f(2024) + f(2023)) / f(2022)и выводим результат.
Итог:
Этот код определяет функцию F(n) с использованием рекурсии и кэширования для оптимизации. Затем вычисляет значения функции для всех n от 1 до 2024, чтобы заполнить кэш. В конце вычисляется значение выражения (2 * F(2024) + F(2023)) / F(2022) и выводится результат.
Ответ: 8191127
