16 номер. Рекурсия
Вычисление рекурсивной функции
(М. Паршиков) Алгоритм вычисления значения функции F(n), где n - натуральное число, задан следующими соотношениями:
F(n)= n, при n ≥ 3000
F(n)= n + x + F(n + 2), при n < 3000
При каком целом значении х, значение выражения F(2984) - F(2988) = 5916
Подсказка
Начните с базового случая и направления изменения аргумента. Для выражения из нескольких значений сначала проверьте, можно ли сократить общую часть.
Решение
1 способ решения
Заметим, что каждое значение функции зависит от следующего значения с той же четностью. Значит можно выразить F(2984) через F(2988):
F(2984) = 2984 + x + F(2986)
F(2986) = 2986 + x + F(2988)
F(2984) = 2984 + x + 2986+ x + F(2988) = 5970 + 2x + F(2988)
Далее уже подставим F(2984) в выражение из вопроса и найдем х:
F(2984) - F(2988) = 5916
5970 + 2x + F(2988) - F(2988) = 5916
2x = -54
x = -27
2 способ решения
for x in range(-100, 100): f = [0] * 3003 for n in range(3002, 1, -1): if n >= 3000: f[n] = n else: f[n] = n + x + f[n + 2] if f[2984] - f[2988] == 5916: print(x) break