栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA递归实现对1~n全排列【附代码详细执行过程】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA递归实现对1~n全排列【附代码详细执行过程】

小白也能理解,大佬请忽视
对于像我这种算法初学者来说,递归真的是太难理解了。像全排列这种入门级别的题目,我都得绕好久,下面分享一下我对这题的理解思路和解题过程,希望能对大家理解递归的思想有一点点的帮助,欢迎大家在评论区留言讨论。

例 对1,2,3进行全排列
(1)让第一个数不同,得到3个数列:
1,2,3
2,1,3
3,1,2
以上三个数列,只要第一个数不同,不管后面n-1个数如何排列,这n个数列都是不同的。
(2)对以上3个数列每个数列去掉第一个数,对剩下的数重复(1)操作,得
2,3
3,2
1,3
3,1
1,2
2,1
(3)依旧是对每个数列去掉第一个数,重复以上操作。本例再去掉一个数就只剩一个数了,无法继续,到此结束。因此产生了6个数列:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
(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);
	}
}

以下是代码执行步骤:

以上就是我对这道题的理解了,希望能够对大家有帮助!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号