我想弄清楚这个排列算法是怎么工作的:
def perm(n, i):
if i == len(n) - 1:
print n
else:
for j in range(i, len(n)):
n[i], n[j] = n[j], n[i]
perm(n, i + 1)
n[i], n[j] = n[j], n[i] # swap back, for the next loop
perm([1, 2, 3], 0)
输出:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
问题
原始列表是如何打印的?你知道吗
在本例中,n
的长度是3。最初,i
是0。代码应该跳过if
语句,然后第一次迭代对列表进行变异。我们如何得到[1, 2, 3]
作为第一行输出?你知道吗
它确实跳过了顶层的
if
。它进入else
并在列表中迭代j
。第一次迭代的i==j==0,所以交换什么也不做,然后用([1,2,3],1)重复。你知道吗这个过程对那个实例重复,i==j==1。与([1,2,3],2)一起递归的实例是将
[1, 2, 3]
打印为第一行输出的实例。你知道吗这样就清楚了吗?你知道吗
如果没有,学习如何插入有用的
print
语句来跟踪执行。 也许这更清楚了。你知道吗输出:
相关问题 更多 >
编程相关推荐