'''№ 16.24 (). Алгоритм вычисления функций F(n) иG(n), где n — целое
число, задан следующими соотношениями:

F(n) = G(n) = n! при n ⩽ 5;
F(n) = F(n − 2) − 2 · G(n − 1) при n > 5;
G(n) = F(n − 1) + G(n − 1) − n при n > 5:

Где n! обозначает факториал натурального числа n.

Чему равна сумма цифр значения F(43) + G(43)?

Примечание. Факториал числа n вычисляется по формуле n! = 1 · 2 · : : : · n. В модуле math
имеется функция factorial для нахождения n!.
'''

from functools import lru_cache
from math import factorial

@lru_cache
def F(n):
    if n <= 5:
        return factorial(n)
    return  F(n - 2) - 2 * G(n - 1)

def G(n):
    if n <= 5 :
        return factorial(n)
    return F(n - 1) + G(n - 1) - n

res =  F(43) + G(43)
sm = sum(int(d) for d in str(res))  ## !!!! выучить
print(sm)  # 39
