Найти тему

Вызов функции самой себя в Python. Рекурсия. Оператор return.

Всем привет! Мы продолжаем осваивать Python для сдачи ЕГЭ по информатике. Тема которую мы будем разбирать сегодня, точно пригодится для решения 16 номера из ЕГЭ. Тема не самая простая, потребуется время и терпение, чтобы с ней разобраться. Начнем с основных понятий, которые нам в дальнейшем понадобятся.

Рекурсивной называется процедура, вызывающая сама себя. Эта процедура позволяет свести исходную задачу к одной или нескольким более простым задачам того же типа.

Любую рекурсивную процедуру можно запрограммировать с помощью цикла.

Ранее мы уже разбирали функции в Python. Научились их объявлять и вызывать.

Рекурсивная функция может вызывать саму себя. И для этого в Питоне есть оператор return, он позволяет возвращать значение функции основному коду.

Я понимаю, что вам наверно сейчас ничего не понятно, проще будет разобраться с этим на простом примере.

Программа возвращает числа от 10 до 1
Программа возвращает числа от 10 до 1

Разберем каждую строку подробнее.

1. def f(n): - объявили функцию f с аргументом n;

2. if n > 0: - задали условие при котором дальнейший код будет выполнятся. Как только наш аргумент n станет равным или меньше нуля. Программа запускаться не будет.

3. print(n) - выводит значение аргумента на экран, каждый раз когда выполняется условие заданное выше.

4. return f(n-1) - вызывает функцию с аргументом на 1 меньше, чем предыдущий.

Строки 2 -4 в нашей программе являются телом функции. И не заработают до тех пор, пока мы не вызовем функцию отдельно. Для этого нам и нужна строка -6. f(10)

Т.е. Запускается наша функция с аргументом n = 10. 10 >0? Да! Идем дальше. Дальше на экран выводится 10 (n=10). Следующая строка f(10 - 1), т.е. f (9 ) - эта команда заново запускает нашу функцию только уже с аргументом n = 9. 9 >0? Да! Идем дальше. Дальше на экран выводится 19 (n=9). Следующая строка f(9 - 1),И так функция будет запускаться раз за разом. И когда в 4 строчке будет f(0) функция снова запустится и перейдет ко второй строке, где будет сравнивать 0>0? Нет! И вот тут наша программа завершиться.

Если вы уже изучали циклы в Python, то конечно скажете, что все это можно записать и с помощью цикла и будете абсолютно правы. Более того, рекуррентные функции занимают большой объем и поэтому не подходят для работы с большим количеством данных.

Но понимание и умение применять рекурсию необходимо для сдачи ЕГЭ по информатике. Более того, часто рекурсия выглядит компактнее и понятнее чем цикл.

Раньше в ЕГЭ по информатике нужно было по готовому коду, в котором есть рекурсия определить какие- то данные. Сейчас же вам нужно будет написать код самостоятельно. И мы будем разбираться с рекурсией как было раньше и как есть сейчас. Поэтому, подписывайтесь на мой канал, чтобы ничего не пропустить!