遞迴研究 二 全排列問題

2021-06-29 00:55:48 字數 1533 閱讀 2512

從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...