4.3.计算整数列表和

我们将以一个简单的问题开始,你已经知道如何不使用递归解决。 假设您想计算整数列表的总和,例如:[1,3,5,7,9]。 计算总和的迭代函数 见ActiveCode 1。函数使用累加器变量(theSum)来计算列表中所有整数的和,从 0 开始,并加上列表中的每个数字。

def listsum(numList):
    theSum = 0
    for i in numList:
        theSum = theSum + i
    return theSum

print(listsum([1,3,5,7,9]))

Activecode 1

在这个方程式中,first(numList) 返回列表的第一个元素,rest(numList) 返回除第一个元素之外的所有列表。这很容易在 Python 中表示,如 ActiveCode 2 中所示。

def listsum(numList):
   if len(numList) == 1:
        return numList[0]
   else:
        return numList[0] + listsum(numList[1:])

print(listsum([1,3,5,7,9]))

Active code 2

在这个清单中有几个关键地方。 首先,在第 2 行,我们检查列表是否为一个元素。这个检查是至关重要的,是我们的函数的转义子句。 长度 1 的列表的和是微不足道的; 它只是列表中的数字。 第二,在第 5 行我们的函数调用自己! 这就是我们调用 listum 算法递归的原因。递归函数是调用自身的函数。

当我们到达简单问题的点,我们开始拼凑每个小问题的答案,直到初始问题解决。Figure 2 展示了在 listsum 通过一系列调用返回的过程中执行的 add 操作。当 listsum 从最顶层的问题返回时,我们有整个问题的答案。

Last updated