Обычно, сходу, сложно уложить в голове понятие рекурсии. Тут мои мысли по этому поводу
Определение из Википедии звучит так :
Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Термин «рекурсия» используется в различных специальных областях знаний — от лингвистики до логики, но наиболее широкое применение находит в математике и информатике
В контекст питона это может означать то, что некая функция, до наступления каких-то условий будет вызывать сама себя, уходя, грубо говоря, в глубь. как только это некое условие наступит функция начнет передавать результаты своих вычислений в глубине, наверх.
Это хорошо видно на коде всем известного факториала
def fac(n):
if n == 1:
return 1
else:
return n * fac(n - 1)
факториал 3 (3!) к примеру - это 3 * 2 * 1 = 6
Как я для себя объясняю происходящее в этой функции:
1. на вход приходит какое-то число n (таже тройка)
2. сравниваем это значение с 1. 3 не равно 1, следовательно, выполняется блок else
3. в блоке else мы как бы говорим, что функция отдаст пришедшее на вход число, но только умноженное на результат выполнение этой же функции над числом меньше изначального (тройки) на единицы (т.е. двойки). Но так как значение fac(2) не известно его надо вычислить
4. теперь вычисляется значение fac(2). 2 сравнивается с единицей и выполнение переходит в блок else. сейчас, так же как и в пункте 3 функция должна вернуть 2 умноженную на результат fac(1), но fac(1) пока не известен и функция углубляется дальше.
5. теперь, наконец то на вход функции подали единицу, и она однозначно возвращает 1 проваливаясь в блок if. но возвращает она на уровень выше, в пункт 4
6. теперь, когда значение fac(1) вычислено, его можно умножить на 2, как и требовалось в пункте 4. т.е. вычисляется значение fac(2). результат вычисление fac(2), (а это 2) передается выше, в нашем случае в пункт 3
7. в третьем пункте значение fac(2) умножается на 3 (2 * 3 = 6) и передается выше. но так как выше уже ничего нет , грубо говоря, отложенных операций, функция прекращает свою работу и последнее что она возвращает это 6
Схематично, это могло бы выглядеть как-то так
Таким образом функция углубляется сама в себя до тех пор, пока не дойдет до якоря if n == 1. Стоит отметить, что обязательно нужно обеспечить наступление условие при котором функция перестает уходить в глубину и возвращает какое-то значение. В примере с факториалом это достигается тем, что с каждым новым разом функция опускается в глубь с значением на 1 меньшим предыдущего