Давайте поговорим о рекурсии. Но что сказать? Начнем с формального определения, которое я нашел на сайте Школы вычислительной техники (Университет Юты):
Рекурсия означает «определение проблемы с точки зрения самой себя». Это может быть очень мощным инструментом при написании алгоритмов.
Но что значит само по себе? Давайте посмотрим на это с другой стороны, на этот раз из курса Ускоренный курс по Python на Coursera. Рекурсия определяется следующим образом:
Рекурсия — это повторное применение одной и той же процедуры к меньшей задаче. (…) давайте решать сложные проблемы, сводя проблему к более простой.
Но как мы используем рекурсию? Взгляните на это базовое упражнение из ускоренного курса по Python на Coursera:
Как видите, мы снова вызываем функцию sum_positive_numbers() внутри функции sum_positive_numbers() и тем самым избегаем добавления дополнительных строк кода, поскольку последний возврат суммирует все числа до тех пор, пока n не станет равным 0, а затем выполнение завершится возвратом внутри if.
Давайте проследим за выполнением sum_positive_numbers(3):
- Оценка: 3 равно 0? Нет.
- Затем он возвращает сумму 3 и результат sum_positive_numbers(3–1):
- sum_positive_numbers(2) оценивает, равно ли 2 0. Затем возвращается сумма 2 и sum_positive_numbers(2–1).
- -›sum_positive_numbers(1) оценивает, равно ли 1 0. Теперь он возвращает сумму 1 и sum_positive_numbers(1–1)
- -››sum_positive_numbers(0) оценивает, равен ли 0 0. В этом случае функция возвращает текущее значение n, равное 0.
3. Теперь он суммирует цепочку возвратов sum_positive_numbers(): 3+2+1+0 равно 6.
Я знаю, рекурсия кажется сложной техникой, и лично я не чувствую себя достаточно опытным, чтобы использовать ее, но я знаю достаточно, чтобы понять, насколько мощной она может быть и как она может расширить возможности моего кода!
Вы можете добавлять любые комментарии, делиться опытом или отмечать любые исправления в моем объяснении. Я здесь, чтобы учиться!
Спасибо за прочтение, увидимся в следующей статье 😊