Задача к ЕГЭ по информатике на тему «одна функция» №2

Алгоритм вычисления значения f(n)  , где n  — целое неотрицательное число, задан следующими соотношениями:

f(n) = 1  , при n = 0  или n = 1

f(n) = f (n − 1)∗n,  при n > 1  » class=»math» src=»/images/inform/quest/quest-4532-7.svg» width=»auto»> </p>
<p class= Найдите чему равно значение f(2023)∕∕f(2022)?

Динамическое решение

f = [0] * 5000  # Создаём список для хранения значений функции f(n)

# Задаём известные значения для некоторых n
f[0] = 1
f[1] = 1

for n in range(2, 2025):  # Перебор других значений n
    f[n] = f[n - 1] * n  # при n > 1

print(f[2023] // f[2022])  # Вывод результата

Рекурсивное решение

from functools import lru_cache


# Подключаем кеширование всех результатов функции
@lru_cache(None)  # None - количество кеширований не ограничено
def F(n):
    if n == 0 or n == 1:
        return 1
    else:
        return F(n - 1) * n


for n in range(2500):  # Перебираем значения n
    F(n)  # Вызываем функцию, чтобы значение было посчитано и закешировано

# Данные значения уже будут посчитаны в цикле и сохранены в кеш,
# так что превышения глубины рекурсии не возникнет
print(F(2023) // F(2022))

Аналитическое решение

Функция вычисляет факториал, т.е. произведение всех чисел от 1 до n.

То есть 1∗2-∗⋅⋅⋅∗2022∗-2023   1 ∗2∗ ⋅⋅⋅∗ 2022   .

Значит, после деления у нас останется только число 2023.

Ответ: 2023
Оцените статью
Я решу все!