C语言用递归完成全排列
时间: 2024-12-14 10:13:27 浏览: 11
C语言中使用递归可以方便地实现全排列算法,这是因为全排列的本质是一种分治思想。全排列是指从n个不同元素中取出所有可能的不同组合方式。下面是一个简单的递归函数示例,用于生成数组的全排列:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义递归函数,接受三个参数:数组、起始索引和结束索引
void permute(int arr[], int start, int end) {
if (start == end) { // 当前开始索引等于结束索引,说明只剩下一个元素,递归结束
for (int i = 0; i <= end; ++i)
printf("%d ", arr[i]);
printf("\n");
} else {
// 对于每个剩余的元素,都尝试放在起始位置上,然后对剩余元素递归
for (int i = start; i <= end; ++i) {
swap(&arr[start], &arr[i]); // 交换元素
permute(arr, start + 1, end); // 递归调用
swap(&arr[start], &arr[i]); // 撤销交换,回溯到原始状态
}
}
}
// 交换两个整数指针所指向的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int nums[] = {1, 2, 3};
int n = sizeof(nums) / sizeof(nums[0]);
permute(nums, 0, n - 1);
return 0;
}
```
运行这个程序,它会输出数组`{1, 2, 3}`的所有全排列组合。注意,这个例子假设输入数组中的元素互不相同,如果元素可能会有重复,需要额外处理。
阅读全文