我试图围绕递归的概念,并对以下代码的输出进行以下查询:
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}}的相反方式显示吗?理解这个有什么帮助吗?
答案 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]