Heim  >  Artikel  >  Java  >  So implementieren Sie eine rekursive Anordnung in Java

So implementieren Sie eine rekursive Anordnung in Java

王林
王林nach vorne
2019-11-27 17:04:022101Durchsuche

So implementieren Sie eine rekursive Anordnung in Java

Rekursive Anordnung

Rekursion, allgemein bekannt als „Ich passe mich an“. Wenn man sie aus der Perspektive der Datenstruktur versteht, handelt es sich tatsächlich um einen Stapel.

Wenn wir nach der Anordnung von A, B und C fragen, ist der Prozess ungefähr wie folgt:

(0) Ausgangszustand, keine Daten im Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: A, B, C

(1) Legen Sie A unten auf den Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: B, C

(2) Legen Sie B in den Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: C

(3) Legen Sie C in den Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: Keine, geben Sie die erste Anordnung ABC aus

(4) Entfernen Sie C vom Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: C

(5) Nehmen Sie B vom Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: B, C

(6) Legen Sie C in den Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: B

(7) Legen Sie B in den Stapel. Zu diesem Zeitpunkt außerhalb des Stapels: Keine, geben Sie die zweite Anordnung ACB aus

, klappen Sie dann den Stapel zurück, kehren Sie in den Ausgangszustand zurück und legen Sie dann B am Ende des Stapels ab. Wiederholen Sie die Aktion, um sie zu erhalten alle Arrangements.

Empfehlung für ein kostenloses Video-Tutorial: Java-Video-Tutorial

Das Beispiel sieht wie folgt aus:

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;
    }
}

Laufendes Ergebnis:

ABC
ACB
BAC
BCA
CBA
CAB

Dies Artikel wurde geschrieben von Einführung in Java mit Zero Basics Empfohlene Kolumne, jeder ist herzlich willkommen, gemeinsam zu lernen und zu kommunizieren!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine rekursive Anordnung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen