Рекурсия

Функция, которая зовёт сама себя. 10 класс, углублённый уровень — занятие двенадцатое.

Урок 23 плана — «Рекурсия. Рекурсивные объекты (фракталы). Рекурсивные процедуры и функции. Использование стека для организации рекурсивных вызовов», урок 24 — практическая работа «Рекурсивные подпрограммы». В прошлой паре функция звала другую функцию. Сегодня — саму себя.

Задача через такую же, но меньше

фрагмент программы — набери его сам

Сумма цифр 3815 — это сумма цифр 381 плюс 5.

Без базы — никуда

фрагмент программы — набери его сам

Базы нет: f(5) зовёт f(4), та — f(3), … f(−1), f(−2)… без конца.

Стек вызовов

СпускЧто ждёт в стекеПодъём
кодответа код, потом + 512 + 5 = 17
кодответа код, потом + 111 + 1 = 12
кодответа код, потом + 83 + 8 = 11
кодбаза — ответ сразу3

Печать на спуске и на подъёме

фрагмент программы — набери его сам фрагмент программы — набери его сам

Рекурсивные объекты: фракталы

фрагмент программы — набери его сам

Ветка — это ствол и две ветки поменьше. Каждая повторяет целое.

Функция по формуле — задание 16 ЕГЭ

F(1) = 1;
F(n) = F(n − 1) + n, если n > 1 и n чётно;
F(n) = 2·F(n − 1), если n > 1 и n нечётно.

Чему равно F(6)?

фрагмент программы — набери его сам

Три ошибки рекурсии

  • Нет базы — вызовы без конца, код.
  • Шаг мимо базы — код из нечётного проскакивает код. База должна ловить все концы: код.
  • Забыт код — сумма посчитана и выброшена, наверх уходит код, а следующий вызов падает на код: код.

Рекурсия или цикл

фрагмент программы — набери его сам

Алгоритм Евклида рекурсией — его определение почти дословно: НОД пары равен НОДу пары (b, a % b), а при b = 0 — это a.

Что делаем сегодня

  1. Тренажёр — шесть задач: значение функции, печать, число вызовов, формула, где упадёт, глубина стека.
  2. Три программы, в каждой две рекурсивные функции: код и код, код и код, код и код.
  3. Проверка оболочкой — код: девять наборов данных, проверка, что функции рекурсивные и без циклов, и прямые вызовы каждой.

Отметка: три задания — «5», два — «4», одно — «3». Попыток сколько угодно. Для этой пары — новая папка.

За работу

Сначала тренажёр, потом три программы — по порядку.

Домашнее задание — на странице «Домашнее задание»: шесть типов задач на чтение рекурсивных программ, Python дома не нужен. Тройку можно добрать, четвёрку и пятёрку — только заработать. В начале следующей пары — проверочная по этим же типам.

Материалы подготовлены с использованием технологий искусственного интеллекта. Пробел раскрыть и дальше · ← → слайды