它交换回来,因为它是 python 代码,这意味着s
(列表)是可变的,因此在被调用函数中对其进行的更改会影响调用者中的数组。
如果它没有交换回来,那么在调用返回后,数组将处于“奇怪”状态(由先前的调用留下)。
另一种不需要突变的方法是:
s = [1,2,3,4,5,6,7,8,9]
def perm(s, i):
s = list(s) # copy before mutating
if i == len(s):
print s
for j in range(i, len(s)):
s[i], s[j] = s[j], s[i]
perm(s, i + 1)
或者,也许更清楚:
s = [1,2,3,4,5,6,7,8,9]
def perm(s, i):
如果 i == len(s):
印刷
对于范围内的 j (i, len(s)):
s[i], s[j] = s[j], s[i]
perm(list(s), i + 1) # 传递一个副本
评论不确定为什么这被否决了。一位用户同时对该问题发表了一些评论,但随后将其删除。我认为他们错了,我想删除评论意味着他们意识到了这一点,但我不明白他们为什么不删除反对票(如果是他们的)。或者,如果这是错误的,请有人解释,以便我学习......