#python
#python
Вопрос:
Мне просто интересно, почему в следующей функции,
def test(num):
if num > 0:
return test(num - 1)
else:
return 0
любое значение, которое я ввожу, возвращается как 0.
Комментарии:
1. вы знакомы с рекурсией?
2. Можете ли вы объяснить, почему вы думали, что он вернет что-то отличное от 0?
3. вы, вероятно , хотите
num-1
вместоtest(num-1)
4. Учитывая, что говорит функция, что бы вы ожидали
test(1)
вернуть?
Ответ №1:
Функция рекурсивна — она вызывает себя, пока параметр положительный. Поэтому всякий раз, когда вы отправляете какой-либо положительный параметр, он будет вызывать себя со значением на единицу меньше, пока значение не станет равным нулю — в этом случае оно просто возвращает ноль. Если вы попытаетесь вызвать ее с отрицательным числом, условие приведет к тому, что оно немедленно вернет нулевое значение.
Комментарии:
1. Спасибо! Итак, чтобы уточнить, если бы я просто выполнил «return test (num — 1) num» и передал 5, например, функция выполнила бы 5 -1 5? или, поскольку сначала выполняется 5 — 1, будет ли num равно 4? Извините, я новичок в программировании в целом и все еще изучаю некоторые основы. РЕДАКТИРОВАТЬ: неважно, что он просто нажал lolol спасибо, ребята
Ответ №2:
Я добавил нумерацию для каждой строки, чтобы я мог ссылаться на строки в примере
1 def test(num):
2 if num > 0:
3 return test(num - 1)
4 else:
5 return 0
Давайте возьмем пример
a = 2
test(2)
если достигнет «номер строки 2», где 2 (текущее число)> 0
, так что в «строке номер 3»:
if вернет новый вызов функции для test(2-1)
итак, возврат test(2) -> test(1)
теперь для теста (1)
он снова достигнет «номер строки 2», где 1 (текущее число)> 0, поэтому снова в «строке номер 3»: ii снова вернет новый вызов функции для test(1-1) -> test (0)
теперь для test (0) он снова достигнет «номер строки 2», где 0 (текущее число)> 0 будет false, поэтому теперь он войдет внутрь else в «номер строки 5»: откуда он возвращает 0, который является целым числом, а не рекурсивным вызовом функции
Ответ №3:
тест def(num): если num> 0: возврат (num — 1) else: возврат 0 print test(8)
В строке с return вы вызвали имя функции. Если вы сделаете это, он вернет 7. Потому что вы вызывали функцию в определении функции, которая вызвала проблему. Вызовите функцию после того, как вы указали всю функцию.
Комментарии:
1. Опубликованный мной код был написан не мной, я просто должен объяснить, почему функция возвращает значения, которые она выполняет для одного из моих классов.