好的,所以我是编程新手,而且我正在修读计算机科学入门课程。我们正在使用Python 3.6,我们的教授告诉我们这样做。
基本上我们必须编写一个函数,使得输入是一个列表,我们必须返回值的总和。如果列表作为我们初始列表的元素,我们必须将其中的所有数字相加。
我的一位朋友帮助我并且代码有效,但我无法理解它为什么会起作用。
以下是代码:
def f(L):
sum = 0
if len(L)==0:
return 0
if isinstance(L[0], int):
sum = sum + L[0]
elif isinstance(L[0], list):
sum = sum + f(L[0])
L.remove(L[0])
return sum + f(L)
输入的一个例子是:
print(f([[99777634], [97179966, 91871251], [99887343, 97636420], [92431849]]))
有人可以解释一下这个"返回0"有效吗?为什么有效?
答案 0 :(得分:3)
这是一个递归函数。它基于简单的观察,即通过将第一个元素添加到列表其余元素的总和中,可以找到列表中所有元素的总和。
所有递归算法都需要一个基本案例 - 一个直接确定结果的输入,而不需要再次调用该函数。否则,它将永远地自我调用。在这种情况下,空列表是基本情况,其总和为0
。这样,当将结果添加到上一次调用中第一个元素的值时,就会得到第一个元素。
0
是"附加标识",因此它被用作空列表的基值。如果您是乘法而不是添加,则可以使用1
,因为它是乘法身份。
答案 1 :(得分:2)
该函数正在使用递归。简单来说,递归是指在同一函数中调用函数时。这样做是检查列表的第一个元素的类型,然后如果该元素是一个整数,它将它添加到总和并移动到列表中的下一个元素。如果它是一个列表,它然后再在该内部列表上调用该函数,并将该列表的总和添加到总和中。我建议您自己尝试这样做而不使用在课堂上学到更多知识的递归。
答案 2 :(得分:2)
在递归函数中,您始终需要(至少)一个基本案例。也就是说,一个输入将在没有重复出现的函数的情况下返回。此分支(当列表L
为空时)用于此目的。 (请注意,其他两个案例将重复)