COUNT = 0
def perm(n, begin, end):
global COUNT
if begin >= end:
print(n)
COUNT += 1
else:
i = begin
for num in range(begin, end):
n[num], n[i] = n[i], n[num]
perm(n, begin + 1, end)
n[num], n[i] = n[i], n[num] # 要交换回来
"""
我们来仔细推敲一下循环体里的代码,当我们对序列进行交换之后,就将交换后的序列除去第一个元素放入到下一次递归中去了,
递归完成了再进行下一次循环。这是某一次循环程序所做的工作,这里有一个问题,那就是在进入到下一次循环时,序列是被改变了。
可是,如果我们要假定第一位的所有可能性的话,那么,就必须是在建立在这些序列的初始状态一致的情况下,所以每次交换后,要还原,
确保初始状态一致。所以才要交换回来。
"""
N = [1, 2, 3]
perm(N, 0, len(N))
print(COUNT)
基础算法——全排列问题
最新推荐文章于 2021-01-30 05:00:29 发布