如何通过调用自身编写一个在列表中添加数字的函数?

时间:2013-05-19 13:05:47

标签: python list recursion sum

我正在尝试编写一个函数,它将列表中的所有数字相加,但是通过在Python中调用自身。这是我的意思的一个例子:

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)

您如何使用它来查找列表的总和?

1 个答案:

答案 0 :(得分:0)

nums = [1, 3, 2, 8, 9]
def rec_sum(nums):
    if not nums: return 0
    return nums[0] + rec_sum(nums[1:])

>>> rec_sum(nums)
23

您甚至可以在一行中执行此操作:

def rec_sum(nums):
    return nums[0] + rec_sum(nums[1:]) if nums else 0

为了避免每次通话中列表的所有浅层副本nums[1:],您可以做更有效的事情:

def rec_sum(nums, i=0):
    if i >= len(nums): return 0
    return nums[i] + rec_sum(nums, i+1)

使用Y-Combinator

也很有趣
>>> Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
>>> rec_sum = lambda f: lambda nums: nums[0] + f(nums[1:]) if nums else 0
>>> Y(rec_sum)(nums)
23