Maison  >  Article  >  Java  >  Comment implémenter un arrangement récursif en Java

Comment implémenter un arrangement récursif en Java

王林
王林avant
2019-11-27 17:04:022054parcourir

Comment implémenter un arrangement récursif en Java

Arrangement récursif

La récursion, communément appelée "Je m'ajuste", si elle est comprise du point de vue de la structure des données, il s'agit en fait d'une pile.

Si nous demandons la disposition de A, B et C, le processus est à peu près le suivant :

(0) État initial, aucune donnée dans la pile. A ce moment, en dehors de la pile : A, B, C

(1) Mettre A en bas de la pile. A ce moment, en dehors de la pile : B, C

(2) Mettez B dans la pile. A ce moment, en dehors de la pile : C

(3) Mettez C dans la pile. A ce moment, en dehors de la pile : Aucun, sortez le premier arrangement ABC

(4) Retirez C de la pile. A ce moment, en dehors de la pile : C

(5) Sortez B de la pile. A ce moment, en dehors de la pile : B, C

(6) Mettez C dans la pile. A ce moment, en dehors de la pile : B

(7) Mettez B dans la pile. A ce moment, en dehors de la pile : Aucun, sortez le deuxième arrangement ACB

, puis retirez la pile en séquence, revenez à l'état initial, puis mettez B au bas de la pile. pour prendre toutes les dispositions.

Recommandation de didacticiel vidéo gratuit : Tutoriel vidéo Java

L'exemple est le suivant :

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

Résultat d'exécution :

ABC
ACB
BAC
BCA
CBA
CAB

Ceci L'article est écrit par Getting Started with Java Basics Recommandation de la colonne, tout le monde est invité à apprendre et à communiquer ensemble !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer