python 如何用递归得到一个数字列表的和?

ojsjcaue  于 2023-06-28  发布在  Python
关注(0)|答案(8)|浏览(128)

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

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

返回1+2+3+4+5 == 15
我不是递归函数的Maven,我尝试过这样的方法:

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

问题是我不能循环遍历整数。我相信这是一个相当容易的任务,但我真的想不出来。

x6h2sr28

x6h2sr281#

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

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

rks48beu2#

我认为这是一个更好的没有明确检查长度:

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

演示:

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

yc0p9oo03#

出于学术目的(学习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
rjee0c15

rjee0c154#

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

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

ss2ws0br5#

如果您列表比简单列表更复杂,例如:

mylist = [1,-10,[[2,[3]],7.3],[[[[[[[[[-5]]]],2]]],1],4]]

你应该使用这个代码:

mylist = [1,-10,[[2,[3]],7.3],[[[[[[[[[-5]]]],2]]],1],4]]

def getSum(piece):
    if len(piece)==0:
        return 0
    elif type(piece[0]) is list:
        return getSum(piece[0]) + getSum(piece[1:])
    else:
        return piece[0] + getSum(piece[1:]) 
        
print(getSum(mylist))
mbyulnm0

mbyulnm06#

或者,用一种更“Pythonic”的方式:

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

print(suml(range(101)))

输出:5050

rqdpfwrv

rqdpfwrv7#

使用递归和弹出函数

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

lf5gs5x28#

Somthing like this:

def rec_sum(array):
  total = 0
  if len(array):
    total += array.pop(0) + rec_sum(array)
  return total

相关问题