演算法設計與分析 王曉東 感謝老師
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...