Python 如何通过递归得到一系列数字的和?

Python 如何通过递归得到一系列数字的和?,python,recursion,Python,Recursion,我想用递归函数求和,即 getSum([1, 2, 3, 4, 5]) 应该返回1+2+3+4+5==15 我不是递归函数方面的专家,我尝试过以下方法: def getSum(piece): for i in piece suc += getSum(i) 问题是我不能循环整数。我确信这是一项相当简单的任务,但我真的搞不懂。您不需要循环。递归将为您做到这一点 def getSum(piece): if len(piece)==0: return

我想用递归函数求和,即

getSum([1, 2, 3, 4, 5]) 
应该返回1+2+3+4+5==15

我不是递归函数方面的专家,我尝试过以下方法:

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

问题是我不能循环整数。我确信这是一项相当简单的任务,但我真的搞不懂。

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

def getSum(piece):
    if len(piece)==0:
        return 0
    else:
        return piece[0] + getSum(piece[1:]) 
print getSum([1, 3, 4, 2, 5])
你也可以使用reduce。 函数reduce(func,seq)将函数func()持续应用于序列seq。它返回一个值

reduce(lambda x,y: x+y, range(1,6))
出于学术目的(学习Python),您可以使用递归:

def getSum(iterable):
    if not iterable:
        return 0  # End of recursion
    else:
        return iterable[0] + getSum(iterable[1:])  # Recursion step
但您不应该在实际的生产代码中使用递归。与使用内置程序相比,它效率不高,代码也不那么清晰。对于这种情况,既不需要递归也不需要循环。只需使用内置的:


我认为如果不明确检查长度,会更好一些:

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

或者,以一种更“蟒蛇式”的方式:


输出:5050使用递归和pop函数

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

如果每次调用函数getSum后我都要检查sum呢?所以我想检查f.e.如果sum>9:做点什么?但是我必须用递归来做:PDon不要用生产代码中的递归来做。出于学术目的,它可以,但不要在现实生活中点画。uselpa,谢谢,修复了。
>>> getSum([1, 2, 3, 4, 5])
15
suml = lambda l: l[0] + suml(l[1:]) if l else 0

print(suml(range(101)))
def getSum(piece):
    return piece.pop() + getSum(piece) if piece else 0