递归---全排列(JSU-ZJJ)(❤❤❤❤) (列举出所有情况)

文章介绍了如何利用递归算法解决计算机科学中的全排列问题。对于给定的一组字符,递归方法通过分解问题并处理子问题来生成所有可能的排列组合。文中给出了递归函数的实现,并提供了示例输入和输出,展示如何生成并打印字符的全排列。
摘要由CSDN通过智能技术生成

递归:在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题。

而在初级的题目中,如果是得出所有情况,有时可以直接找规律。今天这个题目同是如此。(但它要求我列举出所有情况,所以我的代码使用了递归)

题目如下:

给定n个字符{r1,r2,…,rn},要求生成这n个字符的全排序。

生成全排列思想如下:

设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。

集合X中元素的全排列记为perm(X)。

(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:

当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;

当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…,(rn)perm(Rn)构成。

输入

输入包括若干个用例,第一行为一个正整数k(1<=k<=10),表示用例个数。

每个用例占两行,其中第一行为该用例字符的个数n(1<=n<=5),第二行为n个字符,字符可以是数字和大小写字母,字符之间用空格隔开。

可以假定给定同一用例中不出现相同的字符。

输出

输出每个用例的全排列,每一个排列占一行。各用例全排序之间用一空行隔开。

样例输入 复制
2
2
1 2
3
a c b
样例输出 复制
12
21

acb
abc
cab
cba
bca
bac

我们可以先对其简单的子情况进行分析,若只有两个数

有三个数:

此时情况为当前的三种乘以之前的两种;3*2

有四个数:

同理此时总情况数为4*6;

........

根据以上思路,写出递归代码也较为容易

新手小白,翻车勿怪。

创作不易,点个赞呗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值