#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 и так далее.
Пожалуйста, обратитесь к изображению ниже: