Найти в Дзене
МОЙ РЕПЕТИТОР

ПОЛНЫЙ ГАЙД ПО РЕКУРСИВНЫМ ФУНКЦИЯМ В PYTHON: ЧАСТЬ 1

🚩РЕКУРСИЯ — ОДНА ИЗ САМЫХ ИНТЕРЕСНЫХ И УВЛЕКАТЕЛЬНЫХ ТЕМ В ПРОГРАММИРОВАНИИ. → Решение рекурсивных задач хорошо развивает алгоритмическое мышление. Для составления рекурсии необходимо найти базовый случай, разобраться с остановкой рекурсии и разбить задачу на подзадачи. Рассмотрим, определение рекурсивной функции: Рекурсивная функция — это функция, которая вызывает саму себя. Для более наглядного понимания рекурсивной функции обратимся к простой аналогии из повседневной жизни ↷ Представьте себе матрёшку: → Весь этот процесс и представляет собой рекурсивную функцию: открытие одной матрёшки приводит к открытию следующей. Из этой простой аналогии можно выразить задачу, для которой подходит рекурсивная функция: 🚩РЕКУРСИЯ НУЖНА, ЧТОБЫ РЕШАТЬ СЛОЖНЫЕ ЗАДАЧИ ЧЕРЕЗ БОЛЕЕ ПРОСТЫЕ. ❗Однако рекурсия нередко вызывает сложности у начинающих программистов. Без чёткого понимания механизма работы стека, базового случая и условий завершения, рекурсия быстро превращается в источник ошибок и бесконеч
Оглавление

🚩РЕКУРСИЯ — ОДНА ИЗ САМЫХ ИНТЕРЕСНЫХ И УВЛЕКАТЕЛЬНЫХ ТЕМ В ПРОГРАММИРОВАНИИ.

→ Решение рекурсивных задач хорошо развивает алгоритмическое мышление. Для составления рекурсии необходимо найти базовый случай, разобраться с остановкой рекурсии и разбить задачу на подзадачи.

Рассмотрим, определение рекурсивной функции:

Рекурсивная функция — это функция, которая вызывает саму себя.

Для более наглядного понимания рекурсивной функции обратимся к простой аналогии из повседневной жизни ↷

-2

Представьте себе матрёшку:

  • Открываете первую матрёшку, самую большую
  • Внутри находится ещё одна матрёшка, только меньше
  • Внутри ещё одна матрёшка
  • И так можно открывать все матрёшки до самой маленькой

→ Весь этот процесс и представляет собой рекурсивную функцию: открытие одной матрёшки приводит к открытию следующей.

Из этой простой аналогии можно выразить задачу, для которой подходит рекурсивная функция:

🚩РЕКУРСИЯ НУЖНА, ЧТОБЫ РЕШАТЬ СЛОЖНЫЕ ЗАДАЧИ ЧЕРЕЗ БОЛЕЕ ПРОСТЫЕ.

-3

❗Однако рекурсия нередко вызывает сложности у начинающих программистов. Без чёткого понимания механизма работы стека, базового случая и условий завершения, рекурсия быстро превращается в источник ошибок и бесконечных циклов.

В этом материале мы последовательно разберём, что такое функция в Python, из каких обязательных элементов она состоит и как корректно реализовывать рекурсивные алгоритмы на практике →

→ Перед реализацией рекурсивного алгоритма важно вспомнить, как в Python создаются функции с использованием def

СОЗДАНИЕ ФУНКЦИИ В PYTHON

Подробная инструкция

Ниже представлена пошаговая инструкция по созданию функций в Python. Если вы уже уверенно владеете этим алгоритмом, можете пропустить этот раздел и перейти к Рекурсивной функции 🔚

1️⃣ НАПИСАТЬ СЛУЖЕБНОЕ СЛОВО def

  • def — это команда для создания функции
Первый шаг в создании функции в Python.
Первый шаг в создании функции в Python.

С помощью команды (def), Python понимает, что сейчас будет создана функция

Как правило, функции объявляют в начале программы, что позволяет легче ориентироваться по коду.

def — служебная команда для создания функции в Python

Следующий шаг ⤵

2️⃣ ПРИДУМАТЬ ИМЯ ФУНКЦИИ

  • one — имя для функции
Второй шаг в создании функции в Python.
Второй шаг в создании функции в Python.

Имя функции записывается после служебного слова def

  • Для чего нужны имена функций в Python?

— Для обращения к функции (вызов в программе) ⤵

Вызов функции в программе осуществляется по её имени. Благодаря этому, Python распознаёт, какую именно функцию нужно вызвать.

— Для повторного вызова (многократное использование) ⤵

Функцию можно вызывать любое, необходимое количество раз

❕Важный момент:

— Нельзя выбирать служебные слова для функции

ПРИМЕРЫ СЛУЖЕБНЫХ (КЛЮЧЕВЫХ) СЛОВ В PYTHON

Примеры служебных (ключевых) слов в Python.
Примеры служебных (ключевых) слов в Python.
Служебные (ключевые) слова Python — это специальные зарезервированные слова с фиксированным значением. Их запрещено использовать в качестве имён переменных и функций.

КАКОЕ ТОГДА ВЫБРАТЬ ИМЯ ДЛЯ ФУНКЦИИ?

— Использовать обычные слова, которые можно придумывать самостоятельно ⤵

Примеры допустимых слов для имени функции в Python.
Примеры допустимых слов для имени функции в Python.

⭐Также, имена функций могут отображать какое действие выполняет функция:

  • def sum1() → возможно, данная функция суммирует числа
  • def write_file() → функция для чтения файла

one — НЕ является служебным словом в Python, поэтому такое название допустимо для функции.

👉 Имя функции — это способ вызвать функцию и понять, что она делает.

Имя для функции выбрано, переходим к следующему шагу →

3️⃣ УКАЗАТЬ ПАРАМЕТРЫ ДЛЯ ФУНКЦИИ

Необязательный шаг

  • Параметры функции — это переменные, которые указаны в определении функции (в скобках, после имени функции)
Пример функции (one), содержащей два параметра (x) и (y).
Пример функции (one), содержащей два параметра (x) и (y).
  • x : int — первый параметр функции. Переменная целочисленного типа, которая используется внутри функции.
  • y : str — второй параметр функции one. Строковая переменная, тоже применяемая внутри функции.

Значения для переменных x и y поступают из основной программы, при непосредственном вызове функции one.

👉 Переменные x и y — локальные. То есть они будут существовать и использоваться только внутри функции one.

→ Также параметры:

❌ НЕ глобальные переменные

❌ НЕ обязательные (если есть значение по умолчанию)

Параметры функции — это переменные, указанные в её объявлении и предназначенные для приёма передаваемых значений.

Исходная функция (one) не содержит параметров, поэтому просто переходим к следующему шагу →

4️⃣ НАПИСАТЬ КОД ВНУТРИ ФУНКЦИИ

  • print('Hello') — код внутри функции (one)
Четвёртый шаг в создании функции (one) в Python.
Четвёртый шаг в создании функции (one) в Python.

👉 Код внутри функции (тело функции) — команды, которые будут записаны в функцию. При вызове функции в основной программе, именно этот код и будет выполнен.

Тело функции начинается сразу после строки def и обязательно пишется с отступом →

❕Важный момент:

— Весь код внутри функции пишется с отступом

Фрагмент кода для объяснения принципа отступов внутри функции.
Фрагмент кода для объяснения принципа отступов внутри функции.

Отступ внутри функции означает, что данный код относится именно к функции и будет работать только в рамках данной функции.

Заключительный шаг ⤵

5️⃣ ВЫЗВАТЬ ФУНКЦИЮ В ОСНОВНОЙ ПРОГРАММЕ

  • one() — вызов функции
Пятый шаг в создании функции (one) в Python.
Пятый шаг в создании функции (one) в Python.

👉 Вызвать функцию — это значит запустить её выполнение.

Другими словами:

Это как сказать Python: «Теперь выполни вот этот блок кода».

Вызвать функцию — это:

  • Обратиться к ней по имени (в основной программе): one
  • Поставить круглые скобки после имени: one()
  • Передать аргументы (переменные), при их наличии: 🚫
  • Запустить выполнение: ✅

❕Важный момент:

— Без вызова функции, код внутри функции никогда не выполнится

-12

→ В этом примере ⇪ код внутри функции one выполняться не будет, поскольку в основной программе отсутствует её вызов. В консоли отобразится значение 1 — первый символ строки a = '12345'

Аналогия из жизни для понимания:

Функция — это автомобиль.

  • def — покупка автомобиля.
  • one() — кнопка «Старт»

Пока кнопку не нажать — автомобиль не поедет.

ПРИМЕР МНОГОКРАТНОГО ВЫЗОВА ФУНКЦИИ two

  • two — имя функции
  • х — параметр функции (переменная внутри функции)
  • print(x * x) — тело функции (код внутри функции)
  • two(5), two(-10), two(25), two(1000) — многократный вызов функции в основной программе ⤵
Пример создания функции two() с многократными вызовами в основной программе.
Пример создания функции two() с многократными вызовами в основной программе.

Следующая важная тема для понимания принципа работы рекурсивных функций в Python — оператор return →

ОПЕРАТОР RETURN И ЕГО РОЛЬ В ФУНКЦИЯХ

return — это способ передать ответ функции наружу

-14
  • return — это служебная команда (служебный оператор), который:
  1. Возвращает результат работы функции в основную программу
  2. Завершает выполнение функции

АССОЦИАЦИЯ ИЗ ЖИЗНИ

Ученик выходит решать пример к доске на уроке математики

Ученик выходит решать пример:

  • Происходит вызов функции → def student(a)

Пока ученик решает пример:

  • Он занят задачей → x = 20 * a - 70
  • Учитель ждёт результат
  • Следующий ученик не выходит к доске

❕Ключевой момент return:

Когда ученик закончил решение, он:

  • Показывает ответ → return x

🔃Иными словами, ученик получил конкретную задачу (def student), решил её (x = 20 * a - 70) и представил результат — то есть вернул итоговое значение (return x) ↷

-15
  • return x — означает, что функция student должна вернуть в основную программу текущее значение переменной х

ДРУГОЙ ПРИМЕР С ИСПОЛЬЗОВАНИЕМ ОПЕРАТОРА RETURN

Рассмотрим функцию three, которая принимает число и возвращает его удвоенное значение

Функция (three) в Python, которая принимает на вход число и возвращает его удвоенное значение. Результат НЕ отображается на экране консоли.
Функция (three) в Python, которая принимает на вход число и возвращает его удвоенное значение. Результат НЕ отображается на экране консоли.

→ В данном примере ⇪ функция three была вызвана с параметром 5. При её выполнении команда return возвращает результат вычисления: 5 × 2 = 10.

❌ Почему на экране не появился ответ?

— Ошибок не обнаружено. Программа работает, но ответа нет.

  • Ответ:

❕Функция three ничего не выводит. Она только считает и возвращает результат. При этом, результат никуда не сохраняется и не выводится.

→ Другими словами:

  • функция вернула значение 10
  • НО программа ничего не сделала

✖ Поэтому на экране консоли ничего не отобразится

Каким способом отобразить результат функции в основном коде программы

— Необходимо добавить команду print в основную программу

Теперь при вызове функции three на экран выводится значение, переданное ею с помощью return ⤵

Функция (three) в Python, которая принимает на вход число и возвращает его удвоенное значение. Результат выводится на экран консоли.
Функция (three) в Python, которая принимает на вход число и возвращает его удвоенное значение. Результат выводится на экран консоли.

МНОГОКРАТНЫЙ ВЫЗОВ ФУНКЦИИ С ИСПОЛЬЗОВАНИЕМ ОПЕРАТОРА return

Функция (three) в Python, которая принимает на вход число и выполняет определённый алгоритм. Результат выводится на экран консоли.
Функция (three) в Python, которая принимает на вход число и выполняет определённый алгоритм. Результат выводится на экран консоли.

ЧТО ПРОИСХОДИТ С ФУНКЦИЕЙ ПОСЛЕ КОМАНДЫ RETURN?

Рассмотрим функцию four в которой записана команда print после return ⤵

Функция four в Python, которая уменьшает число на 100 и возвращает ответ в основную программу.
Функция four в Python, которая уменьшает число на 100 и возвращает ответ в основную программу.

Почему на экране консоли не появилась надпись END после выполнения функции four?

Как только Python встречает return внутри функции:

  • Функция сразу прекращает свою работу
  • Значение из return передаётся в основную программу
  • Код после return не выполняется

Код, который записан после команды return, не будет выполнен.

ЗАЧЕМ НУЖНЫ ФУНКЦИИ В PYTHON

Ключевые моменты

  • Многократное использование кода

Один и тот же фрагмент программы можно вызывать несколько раз без повторного написания ↷

Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.
Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.

→ В данном ⇪ примере создаётся функция three для перевода чисел из 10 СС в 3 СС. В основной программе функция используется (вызывается) два раза.

С помощью функции, можно написать код один раз, а использовать много раз.

  • Компактность

Использование функций в Python позволяет сократить объём программного кода ↷

Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.
Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.

→ Благодаря функции three количество строк программного кода сократилось с 21 до 17

Одинаковые действия не нужно каждый раз писать заново. Код выносят в функцию, а потом вызывают её по имени.

  • Структурирование программы + Повышение читаемости кода

Программа разбивается на логически завершённые части, что упрощает понимание и анализ алгоритма ↷

Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.
Сравнение программ в Python с использованием и без использования функции. На примере решения задания №5 ЕГЭ Информатика.
Большую и сложную программу делят на несколько частей. Каждая часть отвечает за своё действие.

Прекрасная работа! Теперь, разобравшись с функциями в Python, можно приступить к изучению РЕКУРСИИ ↷

🔥ПРОДОЛЖЕНИЕ СТАТЬИ 📥

-23