← Все вопросы

Как решать задание 16 ЕГЭ по информатике (рекуррентная функция F)?

Задан 10 месяцев назад931 просмотров2 ответа
9

Задание 16 задаёт функцию F(n) через саму себя (рекуррентно) и просит найти значение F при большом n. Считать вручную дерево вызовов нереально. Как решать рекуррентные задания 16 на Python?

2 ответа

13
✓ Принятый ответ — помог автору

Задание 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 здесь — рекурсия пишется буквально по тексту задачи. Перенёс точно — получил ответ.

5

Аккуратно переноси все ветки условия: и базовые случаи (n=1, n=2 и т.п.), и рекуррентные. Самая обидная ошибка — пропустить один базовый случай, и тогда рекурсия уходит в бесконечность или считает не то.

Если просят «при скольких n значение F(n) меньше X» — оберни F в цикл и считай подходящие n. И не забывай про лимит рекурсии для больших аргументов.

Ваш ответ

Войдите, чтобы ответить на вопрос.