Основные вопросы о рекурсии головы в Python 3

#python-3.x #recursion #stack

#python-3.x #рекурсия #стек

Вопрос:

Очень простой вопрос, поскольку я совершенно новичок в этих концепциях. Я поместил эту функцию рекурсии головы в Python Tutor, чтобы лучше понять, что происходит — почему функция даже не касается print (‘Count после рекурсивного вызова:’) до САМОГО конца? Последующий вопрос — почему числа затем печатаются по порядку после выполнения возвращаемой части оператора if?

Я чувствую, что мне здесь не хватает чего-то сверхосновного / переосмысливаю это, ха-ха

PS. Простите за плохое форматирование, если так получится в сообщении, я новичок в этом, лол.

 def head_recursion(count):

    if count <= 0:

        print('Base case reached! HEAD RECURSION')

        return

    head_recursion(count-1)

    print('Count after recursive call:',count)


def main():

    print('Executing head_recursion(3)...')

    head_recursion(3)

main()
  

Ответ №1:

Поскольку рекурсивный вызов должен завершиться (достичь базового варианта), прежде чем он сможет вернуться, и пока он не вернется, печать под ним не может выполняться.

 def head_recursion(count):
    if count <= 0:
        print('Base case reached! HEAD RECURSION')
        return 

    # Execution gets to here, then makes a recursive call.
    # It can't continue past here until the recursive call it made returns
    head_recursion(count-1) 

    print('Count after recursive call:',count)
  

Это так же, как и с любым другим кодом:

 y = some_function()
print("Reached") # This won't run until some_function has returned
  

Комментарии:

1. Спасибо! Это имеет смысл, я не знал этого о возврате, но подумал, что это должно быть как-то связано с этим 🙂