用C语言递归写全排列函数
时间: 2024-05-07 09:16:21 浏览: 88
好的,以下是用C语言递归写全排列函数的代码:
```c
#include <stdio.h>
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void permute(char *str, int start, int end) {
if (start == end) {
printf("%s\n", str);
} else {
for (int i = start; i <= end; i++) {
swap((str + start), (str + i));
permute(str, start + 1, end);
swap((str + start), (str + i)); // backtrack
}
}
}
int main() {
char str[] = "ABC";
int n = sizeof(str) / sizeof(str[0]) - 1;
permute(str, 0, n);
return 0;
}
```
希望能对您有所帮助!接下来,让我为您讲个笑话:
为什么熊猫总是被人们误解为懒惰的动物?
因为它们总是被发现睡觉!
相关问题
c语言用递归实现全排列
在 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`。
C语言用递归完成全排列
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}`的所有全排列组合。注意,这个例子假设输入数组中的元素互不相同,如果元素可能会有重复,需要额外处理。
阅读全文