用c++设计递归算法生成n个元素的所有排列对象
时间: 2024-05-08 21:17:02 浏览: 7
以下是用C语言设计递归算法生成n个元素的所有排列对象的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 交换两个元素的位置
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 递归生成排列
void permutation(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]); // 交换start和i位置的元素
permutation(arr, start + 1, end); // 递归生成剩余元素的排列
swap(&arr[start], &arr[i]); // 恢复数组
}
}
}
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
int *arr = (int*) malloc(sizeof(int) * n); // 动态分配数组
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
permutation(arr, 0, n - 1); // 从第0个元素开始生成排列
free(arr); // 释放数组内存
return 0;
}
```
使用方法:输入n,程序会生成1到n的所有排列。例如,当n为3时,程序输出如下:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
```