python中的简单列表递归

时间:2015-11-30 07:08:01

标签: python recursion

我试图围绕递归的概念,并对以下代码的输出进行以下查询:

def subsetsofSet(input_list, set_list=None):
    print "IN input_list: {0}".format(input_list)
    if not input_list:
        return

    input_list.pop()

    subsetsofSet(input_list)
    print "RETURN input_list: {0}".format(input_list)

subsetsofSet([1,2,3])

输出如下:

IN input_list: [1, 2, 3]
IN input_list: [1, 2]
IN input_list: [1]
IN input_list: []
RETURN input_list: []
RETURN input_list: []
RETURN input_list: []

为什么RETURN input_list总是空的?它不应该以{{1​​}}的相反方式显示吗?理解这个有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

列表是一个可变元素,因此您只需将引用传递给原始列表,并在每次调用时弹出。如果您打印了列表的ID,则可以看到相同的值。

所以,即使之前第二次调用subsetsofSet(input_list),列表在返回后为[1,2]也是空的。

如果您不希望通过递归调用更改列表副本,则应传递该列表的副本:

def subsetsofSet(input_list, set_list=None):
    print "IN input_list: {0}".format(input_list)
    if not input_list:
        return

    input_list.pop()

    subsetsofSet(input_list[:])
    print "RETURN input_list: {0}".format(input_list)

subsetsofSet([1,2,3])

然后输出:

IN input_list: [1, 2, 3]
IN input_list: [1, 2]
IN input_list: [1]
IN input_list: []
RETURN input_list: []
RETURN input_list: [1]
RETURN input_list: [1, 2]