Как сравнить возвращаемое значение рекурсивной функции с целым числом (фактический параметр функции)
Мне нужно сравнить возвращаемое значение рекурсивной функции с целым числом. Делая рекурсивную сумму всех элементов списка, я должен сравнить итоговую сумму с целым числом "n", возвращающим TRUE, если sum == n, FALSE, если sum!= N. В зависимости от функции должны возвращать FALSE, если я даю пустой список. Здесь я сообщаю код, чтобы прояснить ситуацию:)
def function(list_of_numbers,int):
if not list:
return false # I have to return false if list is empty.
if len(l) > 0:
return l[0] + function(list_of_numbers[1:],int) # recursive sum of element
# and here i'm stuck !
1 ответ
Когда not l
мы либо получили пустой список, либо достигли нашего базового варианта, поэтому сравните n
нашим test
номер, если вы хотите, чтобы пустой список вернул истинное изменение test=-1
в test=0
:
def function(l, n=0, test=-1):
if not l:
return n == test
else:
n += l[0]
return function(l[1:], n, test)
In [2]: function([1,2,3],test=6)
Out[2]: True
In [3]: function([1,2,3],test=5)
Out[3]: False
In [4]: function([1,2,3])
Out[4]: False
In [5]: function([])
Out[5]: False
Если вы хотите, чтобы пустой список возвращал False, вы можете проверить, сколько раз была вызвана функция, и сравнить n с тестом или вернуть False:
def function(l, n=0, test=0, calls=0):
if not l:
return n == test if calls > 0 else False
else:
n += l[0]
calls += 1
return function(l[1:], n, test,calls)
Если вы просто хотите передать один аргумент, число для проверки:
def function(l, test, n=0, calls=0):
if not l and calls == 0: # changed for jython
return False
if not l:
return n == test
else:
n += l[0]
calls += 1
return function(l[1:],test,n, calls)