我运行了以下python代码:
def pr1(li):
if len(li) == 1:
print(li)
else:
li[0] += 1
pr1(li[0:-1])
print(li)
def pr2(li, n=1):
if len(li) == 1:
print(li)
else:
li.remove(n)
pr2(li, n+1)
print(li)
pr1([1, 2, 3, 4, 5])
pr2({1, 2, 3, 4, 5})
,我得到了输出:
[5]
[5, 2]
[4, 2, 3]
[3, 2, 3, 4]
[2, 2, 3, 4, 5]
{5}
{5}
{5}
{5}
{5}
似乎递归在列表上创建了一个新的实例,而递归在集合上却没有,这很奇怪。有人能解释一下吗?
您的pr1
函数将列表的副本传递给下一级递归,但您的pr2
函数将修改后的集合传递下来。这允许pr2
函数在递归中弄乱集合的内容,并且当从较低级别返回时,您最终只打印集合的最后一个内容。
尝试调用pr2(set(li),n+1)
以避免此干扰