2014-10-14 2 views
1

Я пытаюсь сделать функцию в python 3, которая подсчитывает число 1 в списке 0 и 1, но оно должно быть рекурсивным без использования функции sum. Может ли кто-нибудь объяснить, почему эта функция не работает?Сумма списков в рекурсивных функциях

def count_ones(s): 
    if len(s) == 0:   
     return 0  
    elif s[0] == 1:  
     return 1 + count_ones(s[1:]) 
    elif s[0] == 0: 
     return 0 + count_ones(s[1:]) 

Подключенный count_ones([1, 0, 0, 1, 1]), я получаю

TypeError: unsupported operand type(s) for +: 'int' and 'list' 
+0

отлично работает для меня. Вы уверены, что скопировали его правильно? – jonrsharpe

+0

Это работает для меня тоже с python 3.4 – Alexis

ответ

0

Ваш базовый случай должен обрабатывать один элемент. Поэтому, если у вас есть только один элемент, преобразуйте его в int и верните это значение.

def count_ones(l): 
    if len(l) == 1: 
     return int(l[0])  # Return int value 1 or 0 
    else: 
     return int(l[0]) + count_ones(l[1:]) 

Тест

>>> count_ones([1,0,0,1,1]) 
3 
+0

OP не возвращает список, нигде в его коде ... –

+0

О, я не смотрел на него достаточно тщательно. Хмм на основе кода, который они разместили, невозможно, чтобы они достигли этой ошибки с этой функцией. – CoryKramer

+0

Это не работает для пустых списков. Лучше иметь пустой список в качестве базового варианта для вашей рекурсии. – uselpa

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