理解这个递归
Understanding this recursion
我不太清楚这个递归是如何工作的
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 + "three") + 4 + (5 + "six")。但是,这不应该产生错误,因为您不能对字符串求和吗?我不确定答案是如何计算出来的。任何帮助将不胜感激。
它计算树上的叶子(表示为列表中的列表)。
如果 s
是一个列表(它正在查看一个非叶节点),它会在每个元素(子树)上调用自身,添加结果,然后 returns 总数。
如果s
不是一个列表(它是一个叶节点)它returns1
(不管s
是否是3.5
,或者5
或 "six"
,返回的是 1
。
递归的基本情况是 "else 1",这就是当 s 不是列表时 returned 的情况。 sum() 在递归调用 c() 时被调用,唯一的非递归 return 值为 1。因此,它只是求和。
想想这样的代码:
def count(objects):
if isinstance(objects, list):
return sum([count(items) for items in objects])
else:
return 1
我不太清楚这个递归是如何工作的
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 + "three") + 4 + (5 + "six")。但是,这不应该产生错误,因为您不能对字符串求和吗?我不确定答案是如何计算出来的。任何帮助将不胜感激。
它计算树上的叶子(表示为列表中的列表)。
如果 s
是一个列表(它正在查看一个非叶节点),它会在每个元素(子树)上调用自身,添加结果,然后 returns 总数。
如果s
不是一个列表(它是一个叶节点)它returns1
(不管s
是否是3.5
,或者5
或 "six"
,返回的是 1
。
递归的基本情况是 "else 1",这就是当 s 不是列表时 returned 的情况。 sum() 在递归调用 c() 时被调用,唯一的非递归 return 值为 1。因此,它只是求和。
想想这样的代码:
def count(objects):
if isinstance(objects, list):
return sum([count(items) for items in objects])
else:
return 1