1、根本思想:递归
2、举例设R={3,5,8,2}为需要排列的元素集合,{3,5,8,2}的全排列=3后面跟着{5,8,2}的全排列+5后面跟着{3,8,2}的全排列+8后面跟着{3,5,2}的全排列+2后面跟着{3,5,8}的全排列。对于{5,8,2}的全排列=5后面跟着{8,2}的全排列+8后面跟着{5,2}的全排列+2后面跟着{5,8}的全排列。以此类推,直到到排列只剩下一个元素。
二、代码实现
#include <stdio.h>
int n = 0; //n用来计全排列的总数
int main() //主函数
{ int list[] = {3,5,8,2};
perm(list, 0, 3);
printf("total:%d\n", n); //输出n的个数
}
void perm(int list[], int begin, int end) //产生list[begin:end]的所有排列
{
int i;
if (begin == end) //begin等于end,即list中只有一个元素时
{
for(i = 0; i <= begin; i++)
printf(&#