Не могу понять рекурсию в функции

#python-3.x #recursion

Вопрос:

Я не могу понять, как это работает. Почему на выходе первая строка, где var X == 1 ? И как компилятор не выдает ошибку, если new_var нигде не определен как целое число ?
Это из-за того, что стек вызовов работает так ? Он возвращается с последнего вызова, поэтому после возврата 1 new_val становится == 1 ?!

Вывод:
Я здесь!!!! X это: 1
Я здесь!!!! X-это: 2, а new_var-1
Я здесь!!!! X-это: 3, а new_var-это 2
. Я здесь!!!! X равно: 4, а new_var равно 6
24

 def fact_rec(x):
    if x > 0:         
        if x == 1:
            print(f"I'm here!!!!  X is: {x}")
            return 1
        else:            
            new_var = fact_rec(x-1)
            print(f"I'm here!!!!  X is: {x}, and new_var is {new_var}")
            return new_var*x
    else:
        return "It's negative"
print(fact_rec(4))
 

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

1. просто примечание, что делать, если пользователь вводит ноль?

2. ноль не является отрицательным

Ответ №1:

для, fact_rec(4) Функция проверит, больше ли 4 нуля или нет, она здесь. Затем он проверит, равно ли оно 1 или нет, его здесь нет. Итак, он вызовет fact_rec(3), и то же самое будет повторено.
Когда x == 1, print(f"I'm here!!!! X is: {x}") будет запущен, и функция вернет 1 вызывающей функции, т. е. fact_rec(2) и так далее. Следовательно, в первую очередь будет выведено условие для x = 1, за которым последует x = 2 и так далее.

Пожалуйста, обратитесь к изображению ниже:

Вызовы функций