Найти тему

Бесконечная рекурсия

Ранее я рассказывал о рекурсивном вызове функции в Python. Сегодня немного поговорим об опасностях рекурсии.

Кроме уже упомянутого повышенного расхода ресурсов, рекурсия может ещё оказаться бесконечной. Это может произойти, если в самой функции есть ошибка, или если в функцию будет передан параметр, который туда не должен быть передан (хотя это тоже ошибка программиста - в функции надо предусматривать такие случаи).

Вспомним наш факториал:

Если передать в эту функцию 0, то мы как раз и попадём в бесконечную рекурсию, потому что функция будет вызывать сама себя до упора. Правда, количество вызовов рекурсивных функций обычно ограничивается средой исполнения. Поэтому в IDLE Python мы получим такую ошибку:

-2

Последнее сообщение нам говорит о том, что превышена максимальная допустимая глубина рекурсии.

Так что при передаче параметров в рекурсивные функции надо быть внимательным. Ну а лучше предусматривать такие ситуации, тем более, что обычно это не требует больших усилий:

-3

Здесь мы проверяем входной параметр. Если он меньше 1 или больше 20, то выходим из функции и возвращаем код ошибки.

Также надо помнить, что в случае с такими функциями, как факториал, передача в функцию слишком большого значения может и не приведёт к бесконечной рекурсии, но всё равно может превысить максимальную глубину рекурсивного вызова или выдать неправильный результат из-за переполнения. Поэтому здесь желательно проверять не только минимально допустимое, но и максимально допустимое значение.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.