Решение на Python:
🔹 Шаг 1. Таблица значений G(n)
G_LIMIT = 22242
G_STEP = 14
_g = [0] * 22257
for n in range(22256, -1, -1):
if n >= G_LIMIT:
_g[n] = n // 33 + 67
else:
_g[n] = _g[n + G_STEP] - 4
📌 Результат: для G(n) при n < G_LIMIT используется ссылка вперёд G(n) = G(n + G_STEP) − …, поэтому значения заполняем массивом сверху вниз.
🔹 Шаг 2. Подключение кэширования
from functools import lru_cache
@lru_cache(None)
📌 Результат: подключается декоратор lru_cache, который запоминает уже вычисленные значения функции. Это нужно, чтобы не считать одно и то же много раз — иначе программа работала бы очень медленно.
🔹 Шаг 3. Описание функции G(n)
def g(n):
return _g[n]
📌 Результат: функция G(n) реализует условия задачи.
если n >= 22242, возвращается n // 33 + 67
если n < 22242, возвращается G(n + 14) - 4
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 4. Описание функции F(n)
def f(n):
if n < 22:
return 10 * (g(n - 6) - 36)
return f(n - 7) + 567
📌 Результат: функция F(n) реализует условия задачи.
если n >= 22, возвращается F(n - 7) + 567
если n < 22, возвращается 10 * (G(n - 6) - 36)
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 5. Предварительный вызов функций
for n in range(22256, -1, -1):
if n >= G_LIMIT:
_g[n] = n // 33 + 67
else:
_g[n] = _g[n + G_STEP] - 4
📌 Результат: предварительный прогон заполняет кэш вычисленными значениями функций.
🔹 Шаг 6. Вычисление и вывод результата
print(f(1024))
📌 Результат: итоговое значение выражения F(1024) выводится на экран — ответ задачи: 25178.
(К. Иглин) Алгоритм вычисления функций F(n) и G(n), где n - целое число, задан следующими соотношениями:
F(n) = F(n−7)+567, если n≥22;
F(n) = 10×(G(n−6)−36), если n<22;
G(n) = n/33+67, если n≥22242;
G(n) = G(n+14)−4, если n<22242.
Чему равно значение функции F(1024)?
В ответе запишите целое число
Решение на Python:
🔹 Шаг 1. Таблица значений G(n)
G_LIMIT = 22242
G_STEP = 14
_g = [0] * 22257
for n in range(22256, -1, -1):
if n >= G_LIMIT:
_g[n] = n // 33 + 67
else:
_g[n] = _g[n + G_STEP] - 4
📌 Результат: для G(n) при n < G_LIMIT используется ссылка вперёд G(n) = G(n + G_STEP) − …, поэтому значения заполняем массивом сверху вниз.
🔹 Шаг 2. Подключение кэширования
from functools import lru_cache
@lru_cache(None)
📌 Результат: подключается декоратор lru_cache, который запоминает уже вычисленные значения функции. Это нужно, чтобы не считать одно и то же много раз — иначе программа работала бы очень медленно.
🔹 Шаг 3. Описание функции G(n)
def g(n):
return _g[n]
📌 Результат: функция G(n) реализует условия задачи.
если n >= 22242, возвращается n // 33 + 67
если n < 22242, возвращается G(n + 14) - 4
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 4. Описание функции F(n)
def f(n):
if n < 22:
return 10 * (g(n - 6) - 36)
return f(n - 7) + 567
📌 Результат: функция F(n) реализует условия задачи.
если n >= 22, возвращается F(n - 7) + 567
если n < 22, возвращается 10 * (G(n - 6) - 36)
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 5. Предварительный вызов функций
for n in range(22256, -1, -1):
if n >= G_LIMIT:
_g[n] = n // 33 + 67
else:
_g[n] = _g[n + G_STEP] - 4
📌 Результат: предварительный прогон заполняет кэш вычисленными значениями функций.
🔹 Шаг 6. Вычисление и вывод результата
print(f(1024))
📌 Результат: итоговое значение выражения F(1024) выводится на экран — ответ задачи: 25178.