Все задачи №16
№16

одна функция, выражение с делением

Алгоритм вычисления функции F(n), где n — целое число, задан соотношениями: F(n) = 1 при n = 1; F(n) = n × F(n − 1), если n > 1. Чему равно значение выражения (F(3238) / 2 + F(3237)) / F(3236)?

Источник: ФИПИ (Основная 18.06.2026), № 31123

Ответвпиши то, что вывела программа
Показать разбор
  1. Перепиши функцию из условия: F(n) = 1 при n = 1, иначе n * F(n - 1).
  2. Значения получаются огромные, поэтому поставь @lru_cache(100): кэш держит только последние значения и не забивает память.
  3. Прогрей функцию циклом снизу вверх до самого большого нужного n. Значения F(3238), F(3237) и F(3236) запомни в переменные прямо в цикле.
  4. Все остальные n считай в ветке else: F(n). Без неё кэш не прогреется.
  5. Посчитай выражение через x1, x2, x3. Оба деления пиши через //, обычное / на таких числах не сработает.
from functools import lru_cache

@lru_cache(100)
def F(n):
    if n == 1:
        return 1
    return n * F(n - 1)

for n in range(2, 3239):
    if n == 3238:
        x1 = F(n)
    elif n == 3237:
        x2 = F(n)
    elif n == 3236:
        x3 = F(n)
    else:
        F(n)
print((x1 // 2 + x2) // x3)