🚩РЕКУРСИЯ — ОДНА ИЗ САМЫХ ИНТЕРЕСНЫХ И УВЛЕКАТЕЛЬНЫХ ТЕМ В ПРОГРАММИРОВАНИИ.
→ Решение рекурсивных задач хорошо развивает алгоритмическое мышление. Для составления рекурсии необходимо найти базовый случай, разобраться с остановкой рекурсии и разбить задачу на подзадачи.
Рассмотрим, определение рекурсивной функции:
Рекурсивная функция — это функция, которая вызывает саму себя.
Для более наглядного понимания рекурсивной функции обратимся к простой аналогии из повседневной жизни ↷
Представьте себе матрёшку:
- Открываете первую матрёшку, самую большую
- Внутри находится ещё одна матрёшка, только меньше
- Внутри ещё одна матрёшка
- И так можно открывать все матрёшки до самой маленькой
→ Весь этот процесс и представляет собой рекурсивную функцию: открытие одной матрёшки приводит к открытию следующей.
Из этой простой аналогии можно выразить задачу, для которой подходит рекурсивная функция:
🚩РЕКУРСИЯ НУЖНА, ЧТОБЫ РЕШАТЬ СЛОЖНЫЕ ЗАДАЧИ ЧЕРЕЗ БОЛЕЕ ПРОСТЫЕ.
❗Однако рекурсия нередко вызывает сложности у начинающих программистов. Без чёткого понимания механизма работы стека, базового случая и условий завершения, рекурсия быстро превращается в источник ошибок и бесконечных циклов.
В этом материале мы последовательно разберём, что такое функция в Python, из каких обязательных элементов она состоит и как корректно реализовывать рекурсивные алгоритмы на практике →
→ Перед реализацией рекурсивного алгоритма важно вспомнить, как в Python создаются функции с использованием def ↷
СОЗДАНИЕ ФУНКЦИИ В PYTHON
Подробная инструкция →
Ниже представлена пошаговая инструкция по созданию функций в Python. Если вы уже уверенно владеете этим алгоритмом, можете пропустить этот раздел и перейти к Рекурсивной функции 🔚
1️⃣ НАПИСАТЬ СЛУЖЕБНОЕ СЛОВО def
- def — это команда для создания функции
→ С помощью команды (def), Python понимает, что сейчас будет создана функция
Как правило, функции объявляют в начале программы, что позволяет легче ориентироваться по коду.
def — служебная команда для создания функции в Python
Следующий шаг ⤵
2️⃣ ПРИДУМАТЬ ИМЯ ФУНКЦИИ
- one — имя для функции
Имя функции записывается после служебного слова def
- Для чего нужны имена функций в Python?
— Для обращения к функции (вызов в программе) ⤵
Вызов функции в программе осуществляется по её имени. Благодаря этому, Python распознаёт, какую именно функцию нужно вызвать.
— Для повторного вызова (многократное использование) ⤵
Функцию можно вызывать любое, необходимое количество раз
❕Важный момент:
— Нельзя выбирать служебные слова для функции
ПРИМЕРЫ СЛУЖЕБНЫХ (КЛЮЧЕВЫХ) СЛОВ В PYTHON ⤵
Служебные (ключевые) слова Python — это специальные зарезервированные слова с фиксированным значением. Их запрещено использовать в качестве имён переменных и функций.
КАКОЕ ТОГДА ВЫБРАТЬ ИМЯ ДЛЯ ФУНКЦИИ?
— Использовать обычные слова, которые можно придумывать самостоятельно ⤵
⭐Также, имена функций могут отображать какое действие выполняет функция:
- def sum1() → возможно, данная функция суммирует числа
- def write_file() → функция для чтения файла
one — НЕ является служебным словом в Python, поэтому такое название допустимо для функции.
👉 Имя функции — это способ вызвать функцию и понять, что она делает.
Имя для функции выбрано, переходим к следующему шагу →
3️⃣ УКАЗАТЬ ПАРАМЕТРЫ ДЛЯ ФУНКЦИИ
❕Необязательный шаг
- Параметры функции — это переменные, которые указаны в определении функции (в скобках, после имени функции)
- x : int — первый параметр функции. Переменная целочисленного типа, которая используется внутри функции.
- y : str — второй параметр функции one. Строковая переменная, тоже применяемая внутри функции.
Значения для переменных x и y поступают из основной программы, при непосредственном вызове функции one.
👉 Переменные x и y — локальные. То есть они будут существовать и использоваться только внутри функции one.
→ Также параметры:
❌ НЕ глобальные переменные
❌ НЕ обязательные (если есть значение по умолчанию)
Параметры функции — это переменные, указанные в её объявлении и предназначенные для приёма передаваемых значений.
Исходная функция (one) не содержит параметров, поэтому просто переходим к следующему шагу →
4️⃣ НАПИСАТЬ КОД ВНУТРИ ФУНКЦИИ
- print('Hello') — код внутри функции (one)
👉 Код внутри функции (тело функции) — команды, которые будут записаны в функцию. При вызове функции в основной программе, именно этот код и будет выполнен.
Тело функции начинается сразу после строки def и обязательно пишется с отступом →
❕Важный момент:
— Весь код внутри функции пишется с отступом ↷
Отступ внутри функции означает, что данный код относится именно к функции и будет работать только в рамках данной функции.
Заключительный шаг ⤵
5️⃣ ВЫЗВАТЬ ФУНКЦИЮ В ОСНОВНОЙ ПРОГРАММЕ
- one() — вызов функции
👉 Вызвать функцию — это значит запустить её выполнение.
Другими словами:
Это как сказать Python: «Теперь выполни вот этот блок кода».
⭐Вызвать функцию — это:
- Обратиться к ней по имени (в основной программе): one
- Поставить круглые скобки после имени: one()
- Передать аргументы (переменные), при их наличии: 🚫
- Запустить выполнение: ✅
❕Важный момент:
— Без вызова функции, код внутри функции никогда не выполнится ↷
→ В этом примере ⇪ код внутри функции one выполняться не будет, поскольку в основной программе отсутствует её вызов. В консоли отобразится значение 1 — первый символ строки a = '12345'
Аналогия из жизни для понимания:
Функция — это автомобиль.
- def — покупка автомобиля.
- one() — кнопка «Старт»
Пока кнопку не нажать — автомобиль не поедет.
ПРИМЕР МНОГОКРАТНОГО ВЫЗОВА ФУНКЦИИ two
- two — имя функции
- х — параметр функции (переменная внутри функции)
- print(x * x) — тело функции (код внутри функции)
- two(5), two(-10), two(25), two(1000) — многократный вызов функции в основной программе ⤵
Следующая важная тема для понимания принципа работы рекурсивных функций в Python — оператор return →
ОПЕРАТОР RETURN И ЕГО РОЛЬ В ФУНКЦИЯХ
return — это способ передать ответ функции наружу ↷
- return — это служебная команда (служебный оператор), который:
- Возвращает результат работы функции в основную программу
- Завершает выполнение функции
АССОЦИАЦИЯ ИЗ ЖИЗНИ
Ученик выходит решать пример к доске на уроке математики ⤵
Ученик выходит решать пример:
- Происходит вызов функции → def student(a)
Пока ученик решает пример:
- Он занят задачей → x = 20 * a - 70
- Учитель ждёт результат
- Следующий ученик не выходит к доске
❕Ключевой момент return:
Когда ученик закончил решение, он:
- Показывает ответ → return x
🔃Иными словами, ученик получил конкретную задачу (def student), решил её (x = 20 * a - 70) и представил результат — то есть вернул итоговое значение (return x) ↷
- return x — означает, что функция student должна вернуть в основную программу текущее значение переменной х
ДРУГОЙ ПРИМЕР С ИСПОЛЬЗОВАНИЕМ ОПЕРАТОРА RETURN
Рассмотрим функцию three, которая принимает число и возвращает его удвоенное значение ⤵
→ В данном примере ⇪ функция three была вызвана с параметром 5. При её выполнении команда return возвращает результат вычисления: 5 × 2 = 10.
❌ Почему на экране не появился ответ?
— Ошибок не обнаружено. Программа работает, но ответа нет.
- Ответ:
❕Функция three ничего не выводит. Она только считает и возвращает результат. При этом, результат никуда не сохраняется и не выводится.
→ Другими словами:
- функция вернула значение 10
- НО программа ничего не сделала
✖ Поэтому на экране консоли ничего не отобразится
❓Каким способом отобразить результат функции в основном коде программы
— Необходимо добавить команду print в основную программу
Теперь при вызове функции three на экран выводится значение, переданное ею с помощью return ⤵
МНОГОКРАТНЫЙ ВЫЗОВ ФУНКЦИИ С ИСПОЛЬЗОВАНИЕМ ОПЕРАТОРА return ⤵
ЧТО ПРОИСХОДИТ С ФУНКЦИЕЙ ПОСЛЕ КОМАНДЫ RETURN?
Рассмотрим функцию four в которой записана команда print после return ⤵
❌Почему на экране консоли не появилась надпись END после выполнения функции four?
→ Как только Python встречает return внутри функции:
- Функция сразу прекращает свою работу
- Значение из return передаётся в основную программу
- Код после return не выполняется
❕Код, который записан после команды return, не будет выполнен.
ЗАЧЕМ НУЖНЫ ФУНКЦИИ В PYTHON
Ключевые моменты →
- Многократное использование кода
Один и тот же фрагмент программы можно вызывать несколько раз без повторного написания ↷
→ В данном ⇪ примере создаётся функция three для перевода чисел из 10 СС в 3 СС. В основной программе функция используется (вызывается) два раза.
С помощью функции, можно написать код один раз, а использовать много раз.
- Компактность
Использование функций в Python позволяет сократить объём программного кода ↷
→ Благодаря функции three количество строк программного кода сократилось с 21 до 17
Одинаковые действия не нужно каждый раз писать заново. Код выносят в функцию, а потом вызывают её по имени.
- Структурирование программы + Повышение читаемости кода
Программа разбивается на логически завершённые части, что упрощает понимание и анализ алгоритма ↷
Большую и сложную программу делят на несколько частей. Каждая часть отвечает за своё действие.
⚡Прекрасная работа! Теперь, разобравшись с функциями в Python, можно приступить к изучению РЕКУРСИИ ↷