ホームページ  >  記事  >  Java  >  Javaで再帰的配置を実装する方法

Javaで再帰的配置を実装する方法

王林
王林転載
2019-11-27 17:04:022054ブラウズ

Javaで再帰的配置を実装する方法

再帰的配置

再帰的、通称「自分で調整する」は、データ構造の観点から理解すると、実際にはスタックです。

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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。