方法1:
程式大致結構:
約定:pl[len] //pl 為最終放置結果的陣列;len為陣列的長度
ele為參與排列的個元素出現的個數
i為pl中下標
假設參與排列的元素有abcd
run(ele,int i)
注意:在遞迴塊內,不應對所傳入的引數進行改變;每個遞迴塊所得到的原始引數應保持一致。
舉例:abcdef進行排列
static int ele=;//每個元素出現的個數
static int len=6;排列的長度
static char rst=new char[6];
static void run(int ele,int i)
if(ele[0]!=0)
if(ele[1]!=0)
if(ele[2]!=0)
if(ele[3]!=0)
if(ele[4]!=0)
if(ele[5]!=0)
}
方法2:( 優化方法1)
程式結構:
set 中存放全部復合型別ele
ele{
type x;//參與排列的資料型別
int num ;//該元素可以出現的個數 }
len:存放排列的陣列長度
引數說明:n為 集合set剩餘n個元素中選擇,實際沒有參與運算,僅僅是為了增加程式的可讀性。
i為存放排列的陣列的下標
run(set,int n,int i){
if(i==len){
遞迴結束
} else{
for (ele ele:set) }
} }例項:
1234 中任取3個元素全排列
public class main }
//核心程式
static void selct(arraylistset,int n,int i)
system.out.println("");
}else }}
} public static void main(string args)//從set中取3個元素進行全排列,從排列的0號位置開始
selct(set,3,0);
}} 遞迴法 元素全排列問題
問題描述 設r 時要進行排列的n個元素 不考慮相等情況 寫出乙個演算法,列出r的所有不同排列。演算法設計 給定n及待排列的n個元素。計算出這n個元素的所有不同排列。演算法思路 設r 是要進行排列的n個元素,r i r 集合x中元素的全排列標記為perem x r i perem x 表示在全排列pe...
遞迴法解決兔子問題
記得以前過相似問題,今天有同事問道,竟然不知所答,故寫篇文章以記之。一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼若干月以後可以繁殖多少對兔子?分析 月份 1 2 3 4 5 6 7 8 9 成兔 0 1 1 2 3 5 8 幼兔 1 0 1 ...
遞迴法解決揹包問題
演算法思想 1 如果在某個時刻,選擇的資料項符合目標重量,那麼工作便完成了 2 從選擇的第乙個資料項開始,剩餘的資料量的加和必須符合揹包的目標量減去 第乙個資料項的重量,這是乙個新的目標重量 3 逐個嘗試組合剩餘資料項的可能性,但是注意不要嘗試所有的組合,因為只要資料項的和大於目標重量的時候,就會停...