Как сравнить возвращаемое значение рекурсивной функции с целым числом (фактический параметр функции)

Мне нужно сравнить возвращаемое значение рекурсивной функции с целым числом. Делая рекурсивную сумму всех элементов списка, я должен сравнить итоговую сумму с целым числом "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)
Другие вопросы по тегам