python遞迴全排列實現方法

2022-09-28 05:30:16 字數 1548 閱讀 5188

排列:從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列;

全排列:當n==m時,稱為全排列;

比如:集合的全排列為:

www.cppcns.com

遞迴思想:

取出陣列中第乙個元素放到最後,即a[1]與a[n]交換,然後遞迴求a[n-1]的全排列

1)如果陣列只有乙個元素n=1,a= 則全排列就是

2)如果陣列有兩個元素n=2,a= 則全排列是:

--a[1]與a[2]交換。交換後求a[2-1]=的全排列,歸結到1)

--a[2]與a[2]交換。交換後求a[2-1]=的全排列,歸結到1)

3)如果陣列有三個元素n=3,a= 則全排列是

,1}--a[1]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

,2)--a[2]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

,3)--a[3]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

...依此類推。

利用python實現全排列的具體**perm.py如下:

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,4]

perm(n,0,len(n))

print count

最後輸出的結果如下:

********************==== restart: d:/python27/perm.py ********************====

[1, 2, 3, 4]

[1, 2, 4, 3]

[1, 3, 2, 4]

[1sfbaqaftte, 3, 4, 2]

[1, 4, 3, 2]

[1, 4, 2, 3]

[2, 1, 3, 4]

[2, 1, 4, 3]

[2, 3, 1, 4]

[2, 3, 4, 1]

[2, 4, 3, 1]

[2, 4, 1, 3]

[3, 2, 1, 4]

[3, 2, 4, 1]

[3, 1, 2, 4]

[3, 1, 4, 2]

[3, 4, 1, 2]

[3, 4, 2, 1]

[4, 2, 3, 1]

[4, 2, 1, 3]

[4, 3, 2, 1]

[4, 3, 1, 2]

[4, 1, 3, 2]

[4, 1, 2, 3]

24>>>

本文標題: python遞迴全排列實現方法

本文位址: /jiaoben/python/237533.html

python非遞迴全排列實現方法

剛剛開始學習python,當前看到了函式這一節。結合陣列操作,寫了個非遞迴的全排列生成。原理是插入法,也就是在乙個有n個元素的已有排列中,後加入的元素,依次在前,中,後的每乙個位置插入,生成n 1個新的全排列。因為python切割陣列或者字串,以及合併比較方便,所以,程式會節省很多 def geta...

遞迴實現全排列python

1.保持a不動,動bcd 2.保持b不動,動cd 3.保持c不動,動d def pailie head string if len string 1 for father string in string pailie head father string,string.replace father...

全排列的遞迴實現方法

對於全排列,比如有5個字元abcde,則有5 120種方法.首先分析出數學遞迴公式,加上對abcde這個字串中的字元做全排列。那麼,假設abcde是乙個輸入引數,輸出的值則是乙個全排列集合。我們就可以有 f abcde a f bcde 注意,此處的 號不是簡單的加號,而是另乙個運算規則,下面會說到...