Рекурсия в python

Рекурсия в 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



Report Page