通过递归实现全排列

做数学相关的我习惯性就是从定义出发,虽然全排列很简单还是要啰嗦一下。

全排列的定义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

公式:全排列数f(n)=n!(定义0!=1)。

具体思路:

1.假设现在有从1~n个数字。首先要理解全排列的第一个数字就是从这n个数字里任选一个,然后第二个数字从剩下n-1个数字中任选一个以此类推。。。然而我们没有那么完美的随机函数,只能够选择去遍历。

2.遍历的过程中肯定会遇到重复的情况,怎么办呢!

3.为了避免重复就需要对已经选过的数字进行判断,如果遇到了前面已经选到的就跳过,去选择那些没有选到过的。这样也实现了全排列。

接下来就是代码实现了。

                                       

代码如下:

#include<iostream>
using namespace std;
#include<stdlib.h>

//全排列
void allrank(int r,int *array,int n)
//r是已经排列的元素个数,array是存储数据的数组࿰
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值