求解全排列递归C语言
时间: 2024-08-11 10:00:33 浏览: 51
在C语言中,求解全排列(Permutations)通常使用递归算法来实现。全排列是指从n个不同元素中取出所有可能的不同序列。下面是一个简单的递归函数示例,用于生成一个数组元素的所有全排列:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个数组存储当前的排列
#define ARRAY_SIZE 5
int arr[ARRAY_SIZE];
// 声明一个帮助函数,用于生成下一次排列
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 递归函数生成全排列
void permute(int start, int end) {
if (start == end) {
// 当前子数组已经形成一个完整的排列,打印出来
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
// 从end开始尝试将每个元素放在start位置,并递归地处理剩余元素
for (int i = start; i <= end; i++) {
swap(&arr[start], &arr[i]); // 交换
permute(start + 1, end); // 递归调用,start+1作为新的起始位置
swap(&arr[start], &arr[i]); // 撤销交换,恢复原数组
}
}
}
int main() {
// 初始化数组
for (int i = 0; i < ARRAY_SIZE; i++) {
arr[i] = i + 1;
}
int n = ARRAY_SIZE;
printf("Permutations of the array [1, %d]:\n", n);
permute(0, n - 1);
return 0;
}
```
阅读全文