Как понять рекурсию в Python?
Нужно смотреть на функцию как на множество разных функций, похожих друг на друга. Поэтому когда функция вызывает саму себя, надо на это смотреть как на функцию, вызывающую очень похожую, но другую функцию. А когда функция вызывает другую функцию, они передают друг другу значения: вызывающая вызываемой подаёт параметры, а вызываемая вызывающей подаёт возвращаемое значение.