Форум » Рекурсивные процедуры и функции » (№ 5268) (Е. Джобс) не сходится ответ » Ответить

(№ 5268) (Е. Джобс) не сходится ответ

zhenya000z: (№ 5268) (Е. Джобс) Алгоритм вычисления значения функции F(n), где n – целое неотрицательное число, задан следующими соотношениями: F(n) = 1 если n < 3 F(n) = F(n – 1) – F(n – 2) если n > 2 и сумма цифр числа n чётная, F(n) = F(n – 1) + F(n // 2) если n > 2 и сумма цифр числа n нечётная. Здесь // означает деление нацело. Определите значение F(100). Здравствуйте, у меня получается -1, а в ответе 23. Подскажите, где моя ошибка? [pre2] from functools import * @lru_cache(None) def f(n): if n<3: return 1 if n>2 and (sum(int(d))%2==0 for d in str(n)): return f(n-1) - f(n-2) if n>2 and (sum(int(d))%2!=0 for d in str(n)): return f(n-1) + f(n//2) print(f(100)) [/pre2]

Ответов - 3

zachto: Условие у вас неверное. [pre2] from functools import * @lru_cache(None) def f(n): if n < 3: return 1 k = 0 for i in str(n): k += int(i) if k % 2: return f(n - 1) + f(n // 2) return f(n - 1) - f(n - 2) print(f(100)) [/pre2]

zhenya000z: большое вам спасибо, у меня всегда проблемы случаются, когда это касается суммы цифр

Wind1: [pre2]a = [0] * 110 for n in range(1, 101): if n < 3: a[n] = 1 if n > 2 and sum(list(map(int, str(n)))) % 2 == 0: a[n] = a[n - 1] - a[n - 2] if n > 2 and sum(list(map(int, str(n)))) % 2 != 0: a[n] = a[n - 1] + a[n // 2] print(a[100])[/pre2]




полная версия страницы