我不太确定这种递归是如何工作的
def c(s):
'''Docstring omitted.'''
return sum([c(i) for i in s]) if isinstance(s, list) else 1
我不明白如何产生以下答案
>>> c(['one', 2, 3.5])
3
>>> c(["one", [2, "three"], 4, [5, "six"]])
6
根据我的理解,该函数接受各自列表中的所有元素,然后添加它们。所以对于第二次调用,它应该是'one'+(2 +“3”)+ 4 +(5 +“six”)。但是,这不应该产生错误,因为你不能对字符串求和?我不确定如何计算答案。任何帮助将不胜感激。
答案 0 :(得分:2)
它计算树上的叶子(表示为列表中的列表)。
如果s
是一个列表(它正在查看非叶子节点),它会在每个元素(子树)上调用自身,添加结果并返回总数。
如果s
不是列表(它是叶子节点),则返回1
(无论s
是3.5
还是5
,或"six"
,1
是返回的内容。
答案 1 :(得分:0)
递归的基本情况是" else 1",这是当s不是列表时返回的内容。 sum()被调用c()的递归调用,唯一的非递归返回值是1.因此,它只是求和。
答案 2 :(得分:0)
想想这样的代码:
def count(objects):
if isinstance(objects, list):
return sum([count(items) for items in objects])
else:
return 1