如何理解以下代码中的递归?

时间:2019-05-27 13:08:35

标签: python python-3.x recursion

我正在尝试理解使用递归返回输入列表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

我的困惑是:

  1. 为什么要在开头设置prev = 0

  2. case ncase n-1之间的关系是什么

0 个答案:

没有答案