Вопрос по 16 заданию егэ
Я написал такой код и не могу разобраться в чем ошибка(программа не выдает ничего)
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 шт):
Автор решения: CrazyElf
→ Ссылка
Можно и без привлечения сторонних библиотек, самому простой кэш в функции сделать:
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))
Автор решения: MBo
→ Ссылка
До кучи нерекурсивный вариант без обсчёта сумм (работает для чисел менее 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]
