用c语言递归方法实现一组数的全排列
时间: 2024-09-15 17:09:02 浏览: 38
C语言实现全排列算法模板的方法
在C语言中,递归是一种常用的方法来求解组合数学问题,如全排列。全排列是指从给定的一组数中取出所有可能的不同顺序序列。下面是一个简单的递归函数来计算一个数组的全排列:
```c
#include <stdio.h>
// 定义递归函数,arr[]存放输入数组,n表示数组长度
void permute(int arr[], int n) {
// 如果只剩下一个元素,返回该元素本身作为排列
if (n == 1)
printf("%d ", arr[0]);
else {
// 对于每个元素,递归地生成剩余元素的所有排列,并将当前元素插入到每个排列的开始
for (int i = 0; i < n; i++) {
// 将arr[i]移动到第一位
swap(&arr[0], &arr[i]);
// 递归调用permute()处理剩下的n - 1个元素
permute(arr, n - 1);
// 回溯,移回原位置
swap(&arr[0], &arr[i]); // 这里需要恢复数组原样,以便继续下一次循环
}
}
}
// 交换两个整数的值
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
// 测试函数
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, n);
printf("\n");
return 0;
}
```
当你运行这个程序时,它会输出数组 `1, 2, 3` 的所有全排列,例如 `1, 2, 3`, `1, 3, 2`, `2, 1, 3`, `2, 3, 1`, 和 `3, 1, 2`, `3, 2, 1`。
阅读全文