我一直在试图获得与递归更好,作为一个练习,我试图创建一个返回和下面的嵌套列表中的所有int
元素功能:[1, [2, 3, [4], []], [5]]
如何理解特定嵌套列表中的递归?
后几个小时,我放弃了,发现了一个我想在这里理解的美丽解决方案。
def lsum(l):
if type(l) is int:
return l
elif type(l) is list and len(l) > 0:
print l
return lsum(l[0]) + lsum(l[1:])
return 0
上面运行的功能和打印如下:
[1, [2, 3, [4], []], [5]]
[[2, 3, [4], []], [5]]
[2, 3, [4], []]
[3, [4], []]
[[4], []]
[4]
[[]]
[[5]]
[5]
问:什么我不明白是怎么当我们的名单是[[]]
函数发现[[5]]
因为[[]][0]
是[]
和[[]][1:]
是[]
?
'5'被发现在递归的一个完全不同的分支中,而空列表'[]'被认为是。 – jonrsharpe 2014-12-03 17:12:41
请解释为什么你认为“函数发现'[[5]]'”时它检查'[[]]'。 – akonsu 2014-12-03 17:15:40
分支?现在我更困惑:) – minerals 2014-12-03 17:17:23