小白也能理解,大佬请忽视
对于像我这种算法初学者来说,递归真的是太难理解了。像全排列这种入门级别的题目,我都得绕好久,下面分享一下我对这题的理解思路和解题过程,希望能对大家理解递归的思想有一点点的帮助,欢迎大家在评论区留言讨论。
例 对1,2,3进行全排列
(1)让第一个数不同,得到3个数列:
1,2,3
2,1,3
3,2,1
以上三个数列,只要第一个数不同,不管后面n-1个数如何排列,这n个数列都是不同的。
(2)对以上3个数列每个数列去掉第一个数,对剩下的数重复(1)操作,得
2,3
3,2
1,3
3,1
2,1
1,2
(3)依旧是对每个数列去掉第一个数,重复以上操作。本例再去掉一个数就只剩一个数了,无法继续,到此结束。因此产生了6个数列:
1,2,3
1,3,2
2,1,3
2,3,1
3,2,1
3,1,2
(4)对于多个数,也是同样的处理方法。
以下是代码:
public class Main {
static int[] a={1,2,3,4,5,6,7,8,9,10};
public static void Solution(int begin,int end){//begin,end分别为数列的首个数和最后一个数的下标
if(begin==end){//递归结束,产生一个全排列
for(int i=0;i<=end;i++){//打印全排列
System.out.print(a[i]+" ");
}
System.out.println();
}else{
for(int i=begin;i<=end;i++){
int temp=a[begin];//交换a[begin]和a[i]
a[begin]=a[i];
a[i]=temp;
Solution(begin+1, end);//对余下的数进行全排列
temp=a[begin];//还原a[begin]和a[i]
a[begin]=a[i];
a[i]=temp;
}
}
}
public static void main(String[] args) {
Solution(0,2);
}
}
以下是代码执行步骤:
以上就是我对这道题的理解了,希望能够对大家有帮助!