怎样用递归实现一组数的全排列
时间: 2023-04-03 20:04:57 浏览: 228
可以使用递归函数来实现一组数的全排列。具体实现方法如下:
1. 定义一个递归函数,输入参数为待排列的数列和当前处理的位置。
2. 如果当前处理的位置已经到达数列的末尾,说明已经完成了一次排列,输出当前排列结果。
3. 否则,从当前位置开始,依次将每个数与当前位置的数交换,然后递归处理下一个位置。
4. 处理完下一个位置后,需要将交换过的数交换回来,以便进行下一次交换。
5. 重复以上步骤,直到处理完所有位置。
下面是一个示例代码:
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++) {
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
// 递归处理下一个位置
permute(arr, start + 1, end);
// 将交换过的数交换回来
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}