從n個不同的元素中任取m(m <= n)個, 按照一定的順序排列起來, 叫做從n個元素中取出m個元素的乙個排列, 當m=n時,所有的排列情況叫做全排列.
若求n個元素的全排列, 可以先求n-1個元素的全排列, 然後針對n-1個全排列的每一種情況t, 把第n個元素依次插入到t的n個間隔中.n=1時,為遞迴的終結條件.
def
permutation
(l):
length = len(l)
#終結條件
if length == 1:
return [[l[0]]]
else:
ll =
#求前n-1個的全排列
n1_permutation = permutation(l[0:-1])
last = l[-1]
#遍歷前n-1個全排列
for t in n1_permutation:
for i in range(length):
temp = t[::]
#把第n個元素依次插入到t的n個間隔中
temp.insert(i, last)
return ll
def
main
(): l = ['a', 'b', 'c', 'd']
ll = permutation(l)
for i in range(len(ll)):
print ll[i]
if __name__ == '__main__':
main()
['d', 'c', 'b', 'a']
['c', 'd', 'b', 'a']
['c', 'b', 'd', 'a']
['c', 'b', 'a', 'd']
['d', 'b', 'c', 'a']
['b', 'd', 'c', 'a']
['b', 'c', 'd', 'a']
['b', 'c', 'a', 'd']
['d', 'b', 'a', 'c']
['b', 'd', 'a', 'c']
['b', 'a', 'd', 'c']
['b', 'a', 'c', 'd']
['d', 'c', 'a', 'b']
['c', 'd', 'a', 'b']
['c', 'a', 'd', 'b']
['c', 'a', 'b', 'd']
['d', 'a', 'c', 'b']
['a', 'd', 'c', 'b']
['a', 'c', 'd', 'b']
['a', 'c', 'b', 'd']
['d', 'a', 'b', 'c']
['a', 'd', 'b', 'c']
['a', 'b', 'd', 'c']
['a', 'b', 'c', 'd']
關於遞迴解決全排列問題的研究
遞迴是乙個非常重要的解題方法和思路,我們在生活中很多地方都用到了遞迴概念。現有一字串序列,要求我們對其進行全排列,例如 ab 的全排列為 ab 和 ba 編寫程式解決問題。在數學中全排列問題是乙個非常常見的問題,在概率問題中經常出現,通常全排列都是用大寫字母a來表示。我們在數學中確實經常做到全排列的...
全排列問題(遞迴)
上次上課老師講了全排列演算法,現在剛剛看自己的寫的全排列演算法,看了好一會才看懂。應該是自己理解的不夠徹底 所以今天徹徹底底的來分析一下 先看圖 思路 先固定乙個字元,然後將固定的字元與它後面的每乙個進行交換,一直遞迴下去,直到固定的字元後面只有乙個字元 我們先看看圖,框外面的字元是被固定的字元,框...
遞迴求解全排列問題
遞迴求解全排列問題 求解思想 排列中每乙個數字,都有一次當最前單一綴的機會,例如 排列陣列 a 1.當a中只有1個數字的時候,a 1 則只有1個數字做單一字首和字尾,則只有一種 1!1 可能 a1,直接輸出 2.當a中只有2個數字的時候,a 2 則a1,a2分別有一次機會做單一字首的機會,2!2 3...