Нужны разъяснения по очень, очень, ОЧЕНЬ простой программе на Python

#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. Опубликованный мной код был написан не мной, я просто должен объяснить, почему функция возвращает значения, которые она выполняет для одного из моих классов.