全排列的數學定義就不再過多解釋,考慮遞迴演算法的實現可從下面幾點入手(以陣列為例,如對其他元素排列,將元素編號放入陣列即可):
1、乙個數的全排列,如排列,就是這個數本身這一種情況
2、兩個數的全排列,如排列:
第一步:將放在第零個位置,剩下的進行乙個數的全排列,結果為
第二步:將放在第零個位置,剩下的進行乙個數的全排列,結果為
即兩個數的全排列為以上2種情況。
3、三個數的全排列,如排列:
第一步:將放在第零個位置,剩下的進行兩個數的全排列,結果為
第二步:將放在第零個位置,剩下的進行兩個數的全排列,結果為
第三步:將放在第零個位置,剩下的進行兩個數的全排列,結果為
即三個數的全排列為以上6種情況。
4、即m個數(無重)的全排列,就是將m個數分別放在第零個位置,再將剩下的m-1個數的全排列加在後面,當m-1=1時為遞迴的出口。
上程式例項:
/**
* 無重複項
* @param arr 為待排列的陣列
* @param n 標記陣列當前位置,即n=0時,對arr[0]到arr[length-1]全排列;n=1時,對arr[1]到arr[length-1]全排列...以此類推,length為陣列長度
*/private static void test1(int arr , int n)
system.out.println();
}else
system.out.println();
}else 進行排列執行結果:
全排列遞迴演算法
全排列是將一組數按一定順序進行排列,如果這組數有n個,那麼全排列數為n 個。現以為 例說明如何編寫全排列的遞迴演算法。1 首先看最後兩個數4,5。它們的全排列為4 5和5 4,即以4開頭的5的全排列和以5開頭的4的全排列。由於乙個數的全排列就是其本身,從而得到以上結果。2 再看後三個數3,4,5。它...
全排列(遞迴演算法)
一 全排列演算法 從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。公式 全排列數f n n 定義0 1 演算法 遞迴演算法 網路上偷了乙個圖 全排列 順便複習乙個數學公式 排列的定義 從n個不同元素中,任取...
全排列遞迴演算法
對於乙個長為 n 的陣列,它的全排列一共有 n!種可能,演算法複雜度最小為o n!如果還需要列印出結果,那麼演算法複雜度為 o n n!演算法設計的思路是,對於第一位給定乙個值,剩下的 n 1 位進行全排列,然後通過乙個迴圈遍歷第一位所有可能的值,這裡我們是通過交換來改變第一位的值,對於 n 1 位...