c语言用递归实现全排列
时间: 2024-11-29 11:11:32 浏览: 2
使用C语言解决字符串全排列问题
5星 · 资源好评率100%
在 C 语言中,我们可以使用递归算法来实现全排列。全排列是指从给定的一组元素中取出所有可能的不同顺序组合。这里是一个简单的全排列递归函数示例,它会遍历数组的每个元素,并对剩余元素进行排列:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数声明,用于保存当前状态
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
// 递归函数实现全排列
void permute(int arr[], int l, int r) {
if (l == r)
printf("%d ", arr[l]); // 如果只有一个元素,直接打印
else {
for (int i = l; i <= r; i++) { // 遍历所有元素
swap(&arr[l], &arr[i]); // 交换当前元素和起始位置的元素
permute(arr, l + 1, r); // 递归处理剩余元素
swap(&arr[l], &arr[i]); // 撤销交换,回溯到上一层递归
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}
```
当你运行这个程序,它将输出数组的所有可能全排列,例如:`123 132 213 231 312 321`。
阅读全文