遞歸排列
遞歸,俗稱“我 調 我 自 己”,如果從資料結構的角度來理解,其實就是棧。
假如我們要求得到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中文網其他相關文章!