Если вы хотите знать, как работает какой-то код, хорошей практикой является просто проходить его построчно.Так что с этой функцией это будет:
Что делает эта функция
Сначала функция проверяет, равен ли ее вход x
0
.Если это так, он возвращает 0
и, возвращая, это также означает, что функция завершена.
if(x==0):
return 0
Если x
не равен 0
, оператор if вернет False
, в результате чего функция переходит к следующим строкам:
else:
return func(x-1, x+ans)
Здесь функция вызывает себя со значением x
, уменьшенным на 1
.Итак, здесь мы видим, что эта функция на самом деле является рекурсивной функцией (подробнее о рекурсивных функциях здесь и здесь ).Второй параметр func
- это значение ans
, присвоенное исходной функции, добавленной к значению x
.Это единственное вхождение переменной ans
, означающее, что она на самом деле не имеет значения в самой функции.
Теперь, вызывая функцию с уменьшенным значением x
, она снова проверит, равно ли это значение0
.Если это так, он вернет 0
, что означает, что функция func
, которая вызвала эту новую функцию func
, также вернет 0
.Или он снова вызовет функцию func
с уменьшенным значением x
.Это будет происходить до тех пор, пока значение x
не станет равным 0
.
Это означает, что единственным значением, которое когда-либо будет возвращено из этой функции, будет 0
.
Итак, короче говоря,Функция сможет вернуть только 0
.
Почему бы не (1,1)
Итак, вы думаете, что возвращаемое значение func
будет (1,1)
.Если вы не знаете, что делает эта функция, я думаю, я понимаю, почему вы думаете, что это произойдет.Я предполагаю, что с этими параметрами в операторе возврата функции:
(x-1, x+ans)
x
будет уменьшен на единицу, делая его 1
(при вводе (2, 0)
), потому что 2 - 1 = 1
.И используя это значение x
в x+ans
, получается 1 + 0 = 1
.В результате возвращается значение (1,1)
.
Но, как уже говорилось, это не так.Значения не рассчитываются таким образом, это просто параметры, переданные функции, чтобы она могла обрабатывать их внутри.
Также, как уже было сказано, функция вернет только 0
, что является целым числом.Это делает невозможным возвращение типа кортежа, например (1,1)
.