Python,使用递归获得数字列表的总和

时间:2016-02-04 07:16:32

标签: python recursion

我想用递归函数对数字求和,即

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

应返回1 + 2 + 3 + 4 + 5 == 15

我不是递归函数的专家,我尝试过类似的事情:

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

问题在于我无法遍历整数。我确信这是一项非常简单的任务,但我真的无法弄明白。

6 个答案:

答案 0 :(得分:5)

您不需要循环。递归会为你做到这一点。

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

答案 1 :(得分:2)

我认为没有明确检查长度会更好一些:

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

演示:

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

答案 2 :(得分: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

答案 3 :(得分:0)

您也可以使用reduce。 函数reduce(func,seq)不断将函数func()应用于序列seq。它返回一个值。

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

答案 4 :(得分:0)

或者,以更“Pythonic”的方式:

suml = lambda l: l[0] + suml(l[1:]) if l else 0

print(suml(range(101)))

输出:5050

答案 5 :(得分:0)

使用递归和弹出功能

def getSum(piece):
    return piece.pop() + getSum(piece) if piece else 0