目錄
描述思路
**輸出 正文
描述
問題是有一組數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個數字的排列就是其本身。直...