我想用递归函数来求和数字,即
getSum([1, 2, 3, 4, 5])
返回1+2+3+4+5 == 15我不是递归函数的Maven,我尝试过这样的方法:
def getSum(piece): for i in piece suc += getSum(i)
问题是我不能循环遍历整数。我相信这是一个相当容易的任务,但我真的想不出来。
x6h2sr281#
你不需要循环。递归将为您做到这一点。
def getSum(piece): if len(piece)==0: return 0 else: return piece[0] + getSum(piece[1:]) print getSum([1, 3, 4, 2, 5])
rks48beu2#
我认为这是一个更好的没有明确检查长度:
def getSum(piece): return piece[0] + getSum(piece[1:]) if piece else 0
演示:
>>> getSum([1, 2, 3, 4, 5]) 15
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
rjee0c154#
你也可以使用reduce。函数reduce(func,seq)不断地将函数func()应用于序列seq。它返回单个值。
reduce(lambda x,y: x+y, range(1,6))
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))
mbyulnm06#
或者,用一种更“Pythonic”的方式:
suml = lambda l: l[0] + suml(l[1:]) if l else 0 print(suml(range(101)))
rqdpfwrv7#
使用递归和弹出函数
def getSum(piece): return piece.pop() + getSum(piece) if piece else 0
lf5gs5x28#
Somthing like this:
def rec_sum(array): total = 0 if len(array): total += array.pop(0) + rec_sum(array) return total
8条答案
按热度按时间x6h2sr281#
你不需要循环。递归将为您做到这一点。
rks48beu2#
我认为这是一个更好的没有明确检查长度:
演示:
yc0p9oo03#
出于学术目的(学习Python),您可以使用递归:
但是你不应该在真实的的生产代码中使用递归。这是没有效率和代码少得多清楚然后使用内置的。在这种情况下,你既不需要递归也不需要循环。只需使用内置的sum:
rjee0c154#
你也可以使用reduce。函数reduce(func,seq)不断地将函数func()应用于序列seq。它返回单个值。
ss2ws0br5#
如果您列表比简单列表更复杂,例如:
你应该使用这个代码:
mbyulnm06#
或者,用一种更“Pythonic”的方式:
输出:5050
rqdpfwrv7#
使用递归和弹出函数
lf5gs5x28#
Somthing like this: