java 實現的用遞迴法實現全排列問題

2021-06-21 15:21:02 字數 980 閱讀 3881

演算法設計與分析 王曉東 感謝老師

perm(list,k,m)

1.當 

k == m,

即元素已經全排列,那麼輸出列印即可。

2當 k+1 = m ,

那麼此時只有兩個元素,輸出兩種排列情況:原數列,交換後的數列。

3.當 

k+2 = m,

那麼此時有三個元素。設順序確定為x1、

x2、x3.

1)  x1不變,對剩下的兩個元素全排列,如2

2)  交換x1、

x2,對剩下的兩個元素全排列,如2

3)交換

x1,x3,

對剩下的兩個元素全排列,如2

4.當 

k+3 = m,

那麼此時有四個元素。設順序確定為x1、

x2、x3、

x4 1)  x1不變,對剩下的三個元素全排列,如3

2)  交換x1、

x2,對剩下的三個元素全排列,如3

3)交換x1、

x3,對剩下的三個元素全排列,如3

4) 交換x1、

x4,對剩下的三個元素全排列,如3

以此類推,直到k==m

。遞迴呼叫結束。

用圖表示如下;

system.out.println("排列數:"+(++count));

}else

for(int i = k; i<= m; i++)

}public static void main(string args)

; perm p = new perm();

p.perm(list,0,3);

}}

Java實現陣列全排序(遞迴)

import org.junit.test 全排序思路 假設有n個數需要進行全排列,我們可以把每個數都放到第乙個位置,然後剩下的n 1個數進行全排列。即有n n 1 種可能性,與n個數進行全排列的n 次可能性一致 利用遞迴的方式,依此類推當剩下的數個數為1時,為一次排列,輸出該排列。所以遞迴函式可以...

python實現鍊錶的反轉遞迴 用遞迴法反轉單鏈表

鍊錶是一種遞迴結構,因此將其與函式式一起使用將產生最佳結果。在您的程式中,您已經使用過程樣式和mutable節點實現了乙個鏈結列表,您將隨著時間的推移更改data和 的值。雖然這可能感覺像是一種直觀的方法,但我想重點關注一種不可變的規則,它將我們從嚴重的狀態複雜性中解放出來。在 首先,我們修復了no...

用遞迴反轉棧(Java實現

用遞迴來反轉棧 最開始的想法是乙個遞迴函式解決,然後仔細想想不行 解法 乙個遞迴函式返回棧的棧底元素並將之移除 另乙個遞迴函式進行遞迴壓入得到的資料 by returnzhang 遞迴翻轉棧 public class reverse 壓入函式 public void push integer num...