遞迴 遞迴法解決排列問題

2021-06-28 19:03:44 字數 1217 閱讀 1350

方法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 逐個嘗試組合剩餘資料項的可能性,但是注意不要嘗試所有的組合,因為只要資料項的和大於目標重量的時候,就會停...