Рекурсивные алгоритмы: принципы и вычисление в задании 16 ЕГЭ
Коротко о главном
Рекурсия — это способ описания алгоритма, при котором функция вызывает саму себя с изменёнными (обычно уменьшенными) параметрами. Любой рекурсивный алгоритм состоит из двух частей: базового случая (условие остановки, ответ известен сразу) и рекурсивного случая (переход к более простой подзадаче). В задании 16 чаще всего просят вычислить значение функции при конкретном или найти , при котором результат удовлетворяет условию. Ключевой навык — уметь "развернуть" рекурсию в цепочку вызовов и посчитать значения снизу вверх (от базового случая к исходному).
Определения и формулы/правила
| Понятие | Пояснение |
|---|---|
| Базовый случай | Условие, при котором функция возвращает значение без дальнейших вызовов, например |
| Рекурсивный случай | Вызов функции с меньшим аргументом: |
| Дерево вызовов | Схема всех вызовов функции, показывает порядок вычислений |
| Глубина рекурсии | Число вложенных вызовов до достижения базового случая |
| Раскрутка (снизу вверх) | Метод: сначала находим , , ..., затем нужное |
Общий вид линейной рекурсии:
При двух рекурсивных вызовах (как в числах Фибоначчи):
Если функция содержит несколько ветвлений (if), важно на каждом шаге проверять, какая ветка сработает — от этого зависит, какая формула применяется.
Как применять
Пример 1. Дана функция:
function F(n)
if n = 0 then F := 1
else F := F(n-1) * 2
end
Найти .
Раскрутка: , , , , .
Пример 2. Функция с двумя ветвями:
function F(n)
if n <= 1 then F := n
else F := F(n-1) + F(n-2)
end
Найти .
, , , , , , .
Пример 3. Найти наименьшее , при котором , если , .
, , , , , , , , , , , , , . Ответ: .
Типичные ошибки
- Забывают базовый случай и пытаются вычислять "от начала", а не строить цепочку снизу вверх.
- Путают порядок операций в формуле: например, считают как .
- Неверно определяют, какая ветвь
ifсрабатывает при конкретном (особенно при условиях вида "чётное/нечётное" или "больше/меньше некоторого значения"). - При двух рекурсивных вызовах (как в Фибоначчи) забывают учесть оба слагаемых или путают индексы.
- Ошибаются в промежуточных вычислениях из-за длинной цепочки — рекомендуется оформлять таблицу значений по шагам.
- Не проверяют, требуется ли найти значение функции или значение аргумента, при котором выполняется условие — это разные типы вопросов.
Где встречается на экзамене
Тема входит в задание 16 (ранее № 11) и иногда пересекается с заданиями на анализ алгоритмов (задание 17, 23). Требуется либо вычислить значение рекурсивной функции для заданного , либо найти минимальное/максимальное , удовлетворяющее условию на результат. Иногда рекурсия задаётся не явной формулой, а псевдокодом или блок-схемой — важно уметь переводить такую запись в математическую зависимость.
Частые вопросы
Как быстро вычислить значение рекурсивной функции без ошибок?
Стройте таблицу значений от базового случая вверх: сначала находите или , затем последовательно до нужного , не пропуская промежуточные шаги.
Что делать, если в функции несколько условий (if-else)?
Для каждого значения определяйте, какая ветвь срабатывает, прежде чем применять формулу — часто ошибка возникает именно из-за неверного выбора ветви.
Как отличить линейную рекурсию от рекурсии с двумя вызовами?
Если функция вызывает саму себя один раз в формуле — рекурсия линейная (как факториал). Если два раза с разными аргументами (например, ) — это разветвлённая рекурсия, как в числах Фибоначчи.
Можно ли решать такие задачи без построения полной таблицы?
Для небольших можно вычислять устно, но при – таблица снижает риск арифметических ошибок и ошибок в порядке вычислений.
Что если нужно найти n, а не значение функции?
Продолжайте раскрутку по шагам, пока значение функции не достигнет требуемого условия (например, превысит порог), и фиксируйте именно тот , при котором условие впервые выполнилось.
Как проверить правильность вычислений?
Пересчитайте два последних шага заново независимо от предыдущих записей — если результат совпадает, вычисления верны.
Потренироваться: задание 16