public class test2_1_4 {
public static void perm(Object[] list,int k,int m){
//产生list[k:m]的所有排列
if(k==m){
//只剩一个元素
for(int i=0;i<=m;i++)
System.out.print(list[i]);
System.out.println();
}else{
//还有多个元素,递归产生排列
for(int i=k;i<=m;i++){
swap(list,k,i);
perm(list,k+1,m);
swap(list,k,i);
}
}
}
public static void swap(Object[] list,int i,int j){
Object obj;
obj = list[i];
list[i] = list[j];
list[j] = obj;
}
public static void main(String[] args) {
Object[] list = {"1","2","3"};
perm(list,0,list.length-1);
}
}
运行结果如下:
123
132
213
231
321
312
递归调用详细过程:
1.swap(list,2,2);
perm(list,3,3); 123
swap(list,2,2);
swap(list,1,1); 2.swap(list,2,3);
perm(list,2,3); perm(list,3,3); 132
swap(list,1,1); swap(list,2,3);
----------------------------------
1.swap(list,2,2);
perm(list,3,3); 213
swap(list,2,2);
swap(list,1,2); 2.swap(list,2,3);
perm(list,2,3); perm(list,3,3); 231
swap(list,1,2); swap(list,2,3);
----------------------------------
1.swap(list,2,2);
perm(list,3,3); 321
swap(list,2,2);
swap(list,1,3); 2.swap(list,2,3);
perm(list,2,3); perm(list,3,3); 312
swap(list,1,3); swap(list,2,3);
----------------------------------