遞迴實現全排列問題

2021-09-11 22:55:06 字數 1377 閱讀 8265

目錄

描述思路

**輸出 正文

描述

問題是有一組數r,需要輸出它的全排列。r的遞迴可定義如下:

當個數n為1時,perm® = ®,其中r是集合r中唯一的元素

當個數n大於1時,perm®由(r1)perm(r1),(r2)perm(r2),(r3)perm(r3),…,(rn)perm(rn)構成

其中ri = r - 即該集合中減去對應元素

思路

其實說直白點,就是遞迴地把這組數規模乙個乙個地縮小,如1,2,3,4. 先把1固定,遞迴地求2,3,4的全排列,又把2固定,遞迴地求3,4的全排列……直到只剩乙個數,輸出這個排列。

當獲取遞迴陣列時,從該組數的第乙個,依次和每一位交換(包括本身),得以產生乙個新遞迴陣列(如1,2,3,4,先是1和1交換,產生新的2,3,4)

當1和1交換產生的所有遞迴完成之後,實際上已經完成了1234,1243,1324,1342,1432,1423的輸出,因為1和自己交換之後,產生了2,3,4

在這個過程中,當1,2,3固定時,只有4剩餘,所以輸出1,2,3,4.然後固定1,2,交換3,4的位置。輸出1,2,4,3.此時1,2固定的已經全部輸出,於是返回到只有1固定,那麼此時2需要與3交換位置,再進行1,3固定的遞迴

其實說這麼多,還不如一張圖來得實在:

}輸出:

1234

1243

1324

1342

1432

1423

2134

2143

2314

2341

2431

2413

3214

3241

3124

3142

3412

3421

4231

4213

4321

4312

4132

4123

遞迴實現全排列問題

有一組數r,需要輸出它的全排列。r的遞迴可定義如下 當個數n為1時,perm r r 其中r是集合r中唯一的元素 當個數n大於1時,perm r 由 r1 perm r1 r2 perm r2 r3 perm r3 rn perm rn 構成 其中ri r 即該集合中減去對應元素 遞迴地把這組數規模...

全排列問題詳解 遞迴實現

給定乙個正整數n,輸出1 n的全排列 首先,根據遞迴的思想,我們可以把求1 n的全排列這個大問題分解為先固定1,求剩下的n 1個數的全排列,在固定2,固定3 依次類推。而對於剩下的這n 1個數,同樣採用這種方法,取裡面的第乙個數,放到當前排列的第乙個位置,再取第二個數放到第乙個位置 即 對於1,2,...

遞迴實現全排列

生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...