Вопрос по 16 заданию егэ

Рейтинг: -2Ответов: 2Опубликовано: 05.02.2023

Задание описано в картинке

Я написал такой код и не могу разобраться в чем ошибка(программа не выдает ничего)

def f(n):

    if n < 3:
        return 1
    if n > 2:
        if sum([int(i) for i in str(n)]) % 2 == 0:
            return f(n-1) - f(n-2)
        else:
            return f(n-1) + f(n // 2)

print(f(100))

Ответы

▲ 2

Можно и без привлечения сторонних библиотек, самому простой кэш в функции сделать:

def f(n, d = {}):
    if n in d:
        return d[n]
    res = 1
    if n > 2:
        if sum([int(i) for i in str(n)]) % 2 == 0:
            res = f(n-1) - f(n-2)
        else:
            res = f(n-1) + f(n // 2)
    d[n] = res
    return res

print(f(100))
▲ 0

До кучи нерекурсивный вариант без обсчёта сумм (работает для чисел менее 10000, далее надо логику if усовершенствовать)

def ff(n):
    a = [1]*(n+1)
    even = True
    for i in range(3, n+1):
        if (i%10) or (i%100==0) and (i%1000):
            even = not even
        a[i] = a[i-1] + (-a[i-2] if even else a[i//2])
    return a[n]