所谓递归,就是方法调用自身。对于递归模式来说,要有一个出口来让递归结束,避免出现死循环。
实例全排列:
从n中拿出m个元素进行排列,当n==m时为全排列。
利用递归就是:把n个元素轮流放入第一个位置,剩余位置全排列(等同于(n-1)全排列+剩余的元素)
设置出口:当n-1等于1时说明递归到最后一个元素,回调。
package com.zhanghaobo.arrangement; /**
* @author Administrator
*排列方法:轮流把数组中元素放入第一个位置,剩余元素全排列(递归),直至剩余元素为1,排列完成。
*begin++当begin==end时说明递归到出口,返回
*/
/**
* @author Administrator
*
*/
public class ArrangementTest { public static void main(String[] args) {
int[] nums=new int[]{1,2};
arrangment(nums, 0, nums.length-1); }
/**
* @param a
* @param begin
* @param end
* 将数组a中的从begin-end位置的元素全排列
*/
public static void arrangment(int[] a,int begin,int end){ if(end==begin){
for(int b:a){
System.out.print(b);
}
System.out.println("");
return;
}
else{
//begin从0开始进行全排列直至begin==end;循环完成一轮后要恢复到原来数组的状态以便下个轮换 for(int i=0;i<=end;i++){
swap(a,begin, i);
arrangment(a,begin+1,end);
swap(a,begin,i);
}
}
} /**
* 其他位置上的元素轮流和begin位置互换,以便其他元素全排列
*/
public static void swap(int[] a,int begin,int other){
int temp=a[begin];
a[begin]=a[other];
a[other]=temp;
}
}