再帰的配置
再帰的、通称「自分で調整する」は、データ構造の観点から理解すると、実際にはスタックです。
A、B、Cの配置を求めると、おおよそ次のような処理になります。
(0) 初期状態、スタックにデータなし。このとき、スタックの外側:A、B、C
(1) Aをスタックの一番下に置きます。このときスタック外:B、C
(2) Bをスタックに置きます。このときスタック外:C
(3) Cをスタックに置きます。このとき、スタック外:None、最初の配列ABC
を出力する (4) Cをスタックからポップする。このとき、スタックの外: C
(5) は B をスタックからポップします。このときスタック外:B、C
(6) Cをスタックに置きます。このときスタック外:B
(7) Bをスタックに置きます。このとき、スタック外:なし、2番目の配列ACB
を出力し、順次スタックをポップバックし、初期状態に戻り、スタックの一番下にBを置き、動作を繰り返すすべての手配を得るために。
無料のビデオ チュートリアルの推奨:java ビデオ チュートリアル
例は次のとおりです:
public class demo{ public static void main(String[] args) { char buf[]={'A','B','C'}; //定义待排列数组 perm(buf,0,buf.length-1); } public static void perm(char[] buf,int start,int end){ if(start==end){//入栈结束条件,执行完该判断语句后开始逐步出栈 for(int i=0;i<=end;i++){ System.out.print(buf[i]); } System.out.println(); } else{//递归正体 for(int i=start;i<=end;i++){//控制入栈数据 exchange(buf,start,i);//入栈操作 perm(buf,start+1,end);//递归,对下一个数据执行出入栈操作 exchange(buf,start,i);//出栈操作 } } } public static void exchange(char[] c,int x,int y){ //交换数组中的数据,在栈里的表现就是入栈和出栈 char temp=c[x]; c[x]=c[y]; c[y]=temp; } }
実行結果:
ABC ACB BAC BCA CBA CAB
Thisこの記事はJava Zero Basic Introductionが執筆したコラムです。ぜひ一緒に学び、コミュニケーションしてください。
以上がJavaで再帰的配置を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。