2015-10-13 4 views
0

Мне нужно написать рекурсивную функцию sums_to (nums, k), которая берет список целых чисел и возвращает True, если сумма всех элементов в списке равна k и возвращает False в противном случае.Рекурсивно суммировать список и сравнивать его с ключом в python

Я не могу использовать функцию суммы в любой форме, а не суммировать список, а затем в конце проверить, равна ли она k. Кроме того, я должен написать sums_to как одну рекурсивную функцию.

До сих пор у меня есть это:

def sums_to(nums, k): 
    if nums == []: 
     if k == 0 
      return True 
     return 0 
    else: 
     return nums[0] + sums_to(nums[1:], k) == k 
+0

Я сделал усилие, чтобы исправить вашу отступа, который, казалось, вставили в этот вопрос неправильно - пожалуйста, подтвердите, что я имею сделанное действительно соответствует тому, что вы намеревались. – lvc

ответ

3

Ваш подход не кажется правильным, в частности рекурсивный шаг не прав - вы должны уменьшить ожидаемый k значение, пока мы не достигнем конца (и только тест k в этот момент!) вместо добавления/сравнения в каждой точке списка. Кроме того, в базовом корпусе отсутствует что-то: что произойдет, если kне ноль? вы должны вернуть False, а не 0. Лучше попробовать это:

def sums_to(nums, k): 
    if nums == []: 
     return k == 0 
    else: 
     return sums_to(nums[1:], k - nums[0]) 

Он работает, как ожидалось:

sums_to([1, 2, 3, 4, 5], 14) 
=> False 
sums_to([1, 2, 3, 4, 5], 16) 
=> False 
sums_to([1, 2, 3, 4, 5], 15) 
=> True 
+1

Идеальная рекурсия, ясная и лаконичная. – iLoveTux

Смежные вопросы