最近在复习递归,话不多说。
交换式全排列
void exchange(int arr[], int a, int b) {
int replace = arr[a];
arr[a] = arr[b];
arr[b]=replace;
}
int count=0;
int arr[] = { 0 };//arr定义到方法里面似乎出来的都是地址值
void full_permutation(int num,int all) {
//递归实现全排列,如输入3, 输出1 2 3,1 3 2,2 1 3 ,2 3 1,3 2 1,3 1 2
//num是进行到第几个大循环,all是一共有几个数
if (num == all) {
for (int q = 0; q< all; q++) {
arr[q] = q + 1;//初始化数组
}
}
if (num==1) {
for (int i=all-1; i >=0; i--) {
printf("%d", arr[i] );
}
count++;
printf("---%d", count);
putchar('\n');
}//结束循环条件
for (int b = 0; b < num; b++) {
exchange(arr, num-1, num-1 - b);//交换
full_permutation(num-1,all);//进入下一层
exchange(arr, num-1, num-1- b);//交换回去
}
}