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

одна функция, шаг 7

Алгоритм вычисления функции F(n), где n — целое число, задан соотношениями: F(n) = 5 при n < 19; F(n) = (n + 4) × F(n − 7), если n ≥ 19. Чему равно значение выражения (F(157163) / 234 + F(157149) / 533) / F(157142)?

Источник: ФИПИ (банк), № 29082

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

@lru_cache(100)
def F(n):
    if n < 19:
        return 5
    return (n + 4) * F(n - 7)

for n in range(19, 157164):
    if n == 157163:
        x1 = F(n)
    elif n == 157149:
        x2 = F(n)
    elif n == 157142:
        x3 = F(n)
    else:
        F(n)
print((x1 // 234 + x2 // 533) // x3)