1、设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。任意输入一串整数或字符,输出结果能够用递归方法实现整数或字符的全排列。使用c语言
时间: 2024-10-10 08:10:48 浏览: 65
Java全排列算法字典序下的下一个排列讲解
在C语言中,我们可以使用递归算法来生成n个元素的全排列。这里是一个经典的递归函数实现,用于生成排列的示例,它适用于整数或字符:
```c
#include <stdio.h>
#include <string.h>
// 函数声明
void swap(int *a, int *b);
void permute(char str[], int l, int r);
// 交换两个元素
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
// 递归生成全排列
void permute(char str[], int l, int r) {
if (l == r)
printf("%s\n", str); // 当只有一个元素时,输出排列
else {
for (int i = l; i <= r; i++) {
// 交换当前元素和下一个元素
swap((char *) &str[l], (char *) &str[i]);
// 递归处理剩余元素
permute(str, l + 1, r);
// 回溯:恢复当前元素和下一个元素的位置
swap((char *) &str[l], (char *) &str[i]); // 这一步非常重要,避免栈溢出
}
}
}
int main() {
char arr[] = {'a', 'b', 'c'};
int n = strlen(arr);
permute(arr, 0, n - 1);
return 0;
}
```
这个程序会打印出字符串 "abc" 的所有可能排列,如 "abc", "acb", "bac", "bca", "cab", "cba"。
阅读全文