Как решать задание 16 ЕГЭ по информатике (рекуррентная функция F)?
Задание 16 задаёт функцию F(n) через саму себя (рекуррентно) и просит найти значение F при большом n. Считать вручную дерево вызовов нереально. Как решать рекуррентные задания 16 на Python?
2 ответа
Задание 16 — рекуррентно заданная функция F(n), например: «F(n) = n + F(n−1) при n>1, F(1) = 1». Нужно найти F(большое n) или решить уравнение F(n) = значение.
Прямой способ — записать рекурсию на Python один в один:
def F(n):
if n == 1: # база из условия
return 1
return n + F(n - 1) # рекуррентное правило
print(F(2026))
Если n большое и упираешься в лимит рекурсии — добавь в начале:
import sys
sys.setrecursionlimit(100000)
Или перепиши циклом, накапливая значение.
Если функция от двух аргументов F(a, b) — переноси оба условия и оба базовых случая. Часто в КЕГЭ просят F(некое число), иногда — при каких аргументах F даёт заданный результат (тогда перебираешь).
Частые ошибки:
- неверная база рекурсии (условие остановки) — самая частая;
- перепутать порядок: в условии может быть
F(n+1) = ..., тогда переформулируй подF(n); - забыть
setrecursionlimitпри большом n и получить ошибку вместо ответа.
Главное достоинство Python здесь — рекурсия пишется буквально по тексту задачи. Перенёс точно — получил ответ.
Аккуратно переноси все ветки условия: и базовые случаи (n=1, n=2 и т.п.), и рекуррентные. Самая обидная ошибка — пропустить один базовый случай, и тогда рекурсия уходит в бесконечность или считает не то.
Если просят «при скольких n значение F(n) меньше X» — оберни F в цикл и считай подходящие n. И не забывай про лимит рекурсии для больших аргументов.