递归输出1到n的全排列
时间: 2024-06-12 12:11:07 浏览: 82
好的,这个问题可以使用递归来解决。具体思路是,先将第一个位置依次填上1到n中的每一个数,然后递归处理剩下的位置。具体实现可以参考下面的代码:
```python
def permute(n):
def dfs(cur):
if cur == n:
print(ans)
return
for i in range(1, n+1):
if not used[i]:
ans[cur] = i
used[i] = True
dfs(cur+1)
used[i] = False
ans = [0] * n
used = [False] * (n+1)
dfs(0)
```
其中,`ans`表示当前排列,`used`表示每个数字是否已经被使用过。在递归函数`dfs`中,如果当前位置已经填满,则输出当前排列并返回;否则,枚举可用的数字,填入当前位置,然后递归处理下一个位置。注意,在递归结束后需要将当前位置的数字标记为未使用,以便后续的排列使用。
相关问题
递归输出1到n的全排列c++
好的,这里是递归输出1到n的全排列的C++代码:
```c++
#include <iostream>
using namespace std;
void permute(int arr[], int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
cout << arr[i] << " ";
}
cout << endl;
} else {
for (int i = start; i <= end; i++) {
swap(arr[start], arr[i]);
permute(arr, start + 1, end);
swap(arr[start], arr[i]);
}
}
}
int main() {
int n;
cout << "Enter the value of n: ";
cin >> n;
int arr[n];
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
permute(arr, 0, n - 1);
return 0;
}
```
这个程序使用了递归来生成1到n的全排列。在每一次递归中,我们将数组中的一个元素与其它元素交换,然后递归地生成剩余元素的全排列。当我们到达数组的末尾时,我们输出当前的排列。
java输出1-n全排列_生成1~n的全排列
生成1~n的全排列可以使用回溯算法,具体步骤如下:
1. 定义一个数组,存放1~n的数字;
2. 定义一个visited数组,记录数字是否被使用过;
3. 定义一个StringBuilder变量,用于存储当前排列;
4. 定义一个count变量,记录已经生成的排列个数;
5. 使用回溯算法,依次枚举数组中的每个数字,如果该数字没有被使用过,则将其加入当前排列中,标记为已使用,然后递归调用生成下一个数字的排列;
6. 如果已经生成了n个数字,则输出当前排列,count加1;
7. 回溯到上一个状态,将该数字从当前排列中删除,标记为未使用。
具体实现代码如下:
```java
public class Permutation {
public static void main(String[] args) {
int n = 3;
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
boolean[] visited = new boolean[n];
StringBuilder sb = new StringBuilder();
int count = 0;
generatePermutation(nums, visited, sb, count);
}
private static void generatePermutation(int[] nums, boolean[] visited, StringBuilder sb, int count) {
if (count == nums.length) { // 已经生成了n个数字
System.out.println(sb.toString());
return;
}
for (int i = 0; i < nums.length; i++) {
if (!visited[i]) {
visited[i] = true;
sb.append(nums[i]);
generatePermutation(nums, visited, sb, count + 1);
sb.deleteCharAt(sb.length() - 1);
visited[i] = false;
}
}
}
}
```
当n为3时,输出的全排列如下:
```
123
132
213
231
312
321
```
阅读全文