我正在尝试理解使用递归返回输入列表S的所有子序列的嵌套列表的代码,这些子序列的元素均不递减。
def inc_subseqs(s):
"""
>>> seqs = inc_subseqs([1, 3, 2])
>>> sorted(seqs)
[[], [1], [1, 2], [1, 3], [2], [3]]
>>> inc_subseqs([])
[[]]
>>> seqs2 = inc_subseqs([1, 1, 2])
>>> sorted(seqs2)
[[], [1], [1], [1, 1], [1, 1, 2], [1, 2], [1, 2], [2]]
"""
def subseq_helper(s, prev):
if not s:
return [[]]
elif s[0] < prev:
return subseq_helper(s[1:], prev)
else:
a = subseq_helper(s[1:], s[0])
b = subseq_helper(s[1:], prev)
return insert_into_all(s[0], a) + b
return subseq_helper(s, 0)
insert_into_all(a, nestedList)
函数返回一个新列表,该列表由nestedList中的所有列表组成,但每个元素的前面都添加了元素a
。
代码如下:
def insert_into_all(item, nested_list):
"""
>>> nl = [[], [1, 2], [3]]
>>> insert_into_all(0, nl)
[[0], [0, 1, 2], [0, 3]]
"""
a = []
for l1 in nested_list:
a += [[item] + l1]
return a
我的困惑是:
为什么要在开头设置prev = 0
。
case n
和case n-1
之间的关系是什么