Рекурсия в python
Объясните пожалуйста, почему функция countDown(5) выводит результат от 0 до 5? То есть как она доходит до значения 0 понятно, но откуда берутся значения 1, 2, 3, 4, 5???
def countDown(start):
if start <= 0:
print(start)
else:
countDown(start - 1)
print(start)
За счет чего происходит присваивание start новых значений?
Ответ:
Смотрите:
- Когда вы запускаете рекурсивную функцию, она при своей работе будет "проваливаться" в себя же (
[1]) до тех пор пока есть вызов ее же. - У вас есть условие (
[2]) которое ограничивает вызовы функции. - И самое главное -- у вас функция проваливается в себя (
[1]) до того как будет выводить значениеstart.
А это значит, что:
- Функция проваливается в себя до тех пор пока значение
startне станет0и напечатает значениеstart - Начинается выход из функций начиная с самой последней (у которой
0) с последующим выводомstart
Код:
def countDown(start):
if start <= 0: # [2]
print(start)
else:
countDown(start - 1) # [1]
print(start)
Думаю, нагляднее будет если добавлю немного логирования:
def countDown(start, indent=0):
print(' ' * indent, 'start:', start)
if start <= 0:
print(' ' * indent, 'print:', start)
else:
countDown(start - 1, indent + 1)
print(' ' * indent, 'print:', start)
countDown(3)
Консоль:
start: 3
start: 2
start: 1
start: 0
print: 0
print: 1
print: 2
print: 3