Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = n, если n ≥ 2025;
F(n) = n + 3 + F(n + 3), если n < 2025.
Чему равно значение выражения
Приведём решение на языке Python.
def F(n):
if n >= 2025:
return n
if n < 2025:
return n + 3 + F(n + 3)
print(F(23) - F(21))
Ответ: 1338.
Приведём решение Евгения Джобса (аналитическое наблюдение).
Для выявления закономерности выражения вычислим значения функции для чисел
| 2027 | 2026 | 2025 | 2024 | 2023 | 2022 | 2021 | 2020 | 2019 | 2018 | 2017 | 2016 |
| 2027 | 2026 | 2025 | 4054 | 4052 | 4050 | 6078 | 6075 | 6072 | 8099 | 8095 | 8091 |
Можно заметить, что разница между числом,
Следовательно, нужно понять, какой тройкой по счету будет тройка (23, 22, 21), и умножить её номер
Приведём решение Евгения Джобса (аналитическое, вывод формулы).
Заметим, что рекуррентная формула накапливает значение
где значение k — максимальное целое число, для которого выполняется неравенство
Найдем
откуда и
тогда
Следовательно, имеем дело с двумя рядами одинаковой длины:
Значит, при вычитании из f(23) значения f(21) получим набор разностей:
то есть
Приведём решение Евгения Джобса на языке Python.
Так как шаг
В списке для каждого значения будет сохраняться последнее вычисленное значение для соответствующего остатка. Таким образом, на каждой итерации будет перезаписываться элемент, который был вычислен
f = [0]*3
for n in range(2025, 2028):
f[n % 3] = n
# перебираем значения в порядке убывания до 21
for n in range(2024, 20, -1):
f[n % 3] = n + 3 + f[n % 3]
print(f[23 % 3] - f[21 % 3])

