首頁 > Java > Java基礎 > 主體

java中如何實現遞歸排列

王林
發布: 2019-11-27 17:04:02
轉載
2060 人瀏覽過

java中如何實現遞歸排列

遞歸排列

遞歸,俗稱“我 調 我 自 己”,如果從資料結構的角度來理解,其實就是棧。

假如我們要求得到A、B、C的排列,流程大概如下:

(0)初始狀態,堆疊內無資料。此時堆疊外:A、B、C

(1)將A放入堆疊底部。此時堆疊外:B、C

(2)將B放入堆疊中。此時堆疊外:C

(3)將C放入堆疊中。此時堆疊外:無,輸出第一種排列ABC

(4)將C退棧。此時堆疊外:C

(5)將B退棧。此時堆疊外:B、C

(6)將C放入堆疊中。此時堆疊外:B

(7)將B放入堆疊中。此時堆疊外:無,輸出第二種排列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
登入後複製

本文由java零基礎入門專欄推薦,歡迎大家一起來共同學習交流!

以上是java中如何實現遞歸排列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!