2016-02-04 3 views
2

Я хочу суммировать числа с рекурсивной функцией, т.е.Python, получить сумму списка чисел с помощью рекурсии

getSum([1, 2, 3, 4, 5]) 

должен возвращать 1 + 2 + 3 + 4 + 5 == 15

Я не эксперт в рекурсивных функциях, я пытался что-то вроде:

def getSum(piece): 
    for i in piece 
     suc += getSum(i) 

проблемы заключается в том, что я не могу перебрать целые числа. Я уверен, что это довольно простая задача, но я действительно не могу понять это.

ответ

2

Вам не нужно зацикливаться. Рекурсия сделает это за вас.

def getSum(piece): 
    if len(piece)==0: 
     return 0 
    else: 
     return piece[0] + getSum(piece[1:]) 
print getSum([1, 3, 4, 2, 5]) 
+0

А что, если я хочу, чтобы проверить сумму после каждого вызова функции getSum? Поэтому я хочу проверить fe если сумма> 9: что-то делать? –

+0

Не работает для пустых списков. – uselpa

+0

Нет смысла тестировать длину == 1. – uselpa

0

Вы также можете использовать сокращение. Функция reduce (func, seq) постоянно применяет функцию func() к последовательности seq. Он возвращает одно значение.

reduce(lambda x,y: x+y, range(1,6)) 
1

Для академических целей (обучения Python), вы можете использовать рекурсию:

def getSum(iterable): 
    if not iterable: 
     return 0 # End of recursion 
    else: 
     return iterable[0] + getSum(iterable[1:]) # Recursion step 

Но вы не должны использовать рекурсию в реальном коде производства. Это неэффективно, и код намного менее понятен, чем при использовании встроенных модулей. Для этого случая вам не нужна ни рекурсия, ни цикл. Просто используйте встроенный sum:

>>>a = [1, 2, 3, 4, 5] 
>>>sum(a) 
15 
+0

Но я должен сделать это с рекурсией: P –

+0

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

+0

Не работает для пустых списков – uselpa

2

Я думаю, что это немного лучше без явного проверки длины:

def getSum(piece): 
    return piece[0] + getSum(piece[1:]) if piece else 0 

Демо:

>>> getSum([1, 2, 3, 4, 5]) 
15 
Смежные вопросы