利用递归,来求任意n个数中取出m个数的全排列
分析:
求n个数的全排列,也就是:
- 第一个数不动,将后面的n-1个数全排
- 将第二个数和第一个数交换,将后面n-1个数全排列(注意要换回来)
- 将第三个数和第一个数交换,然后将后面n-1个数全排
…
将第n个数和第一个数交换,然后将后面n-1个数全排
可以利用递归的思想来实现,直到n-1等于1
而取出m个数也就是让n-m=1时结束就可以
下面直接贴代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;
bool is_swap(int start , int last , int *p )//判重,如果之间start~i间有重复的数字,则不进行交换,避免重复的情况出现
{
for(int i = start ; i < last ; i++)