递归全排列:
/*以num=[1,2,3,4,5]为例
* 1.f1(0,num)
* 2.i=0->i=4递归到最后一个元素,输出1 2 3 4 5
* 3.i=4->i=3交换4 5,i=3->i=4,输出1 2 3 5 4
* 4.i=4->i=3,5 4换回来,for循环完毕,返回上一层
* 5.i=3->i=2 交换3 4,i=2->i=3
* 6.重复往深递归
*/
private static void f1(int i,int[] num) {
if(i==num.length-1) //已到最后一个元素,返回
System.out.println(Arrays.toString(num));
else { /*当前元素和它后面的每个元素交换,
*交换后进入下一个元素的交换,返回后再换回来
*/
for(int j=i;j<num.length;j++) {
int t=num[i];
num[i]=num[j];
num[j]=t;
f1(i+1,num);
num[j]=num[i];
num[i]=t;
}
}
}