1.生成1-n的排列 递归法
1 #include<stdio.h> 2 int A[100]; 3 // 输出1~n的全排列 4 void print_permutation(int n, int* A, int cur) { 5 int i, j; 6 if(cur == n) { // 递归边界 7 for(i = 0; i < n; i++) printf("%d", A[i]); 8 printf("\n"); 9 } else for(i = 1; i <= n; i++) { // 尝试在A[cur]中填各种整数i 10 int ok = 1; 11 for(j = 0; j < cur; j++) 12 if(A[j] == i) ok = 0; // 如果i已经在A[0]~A[cur-1]出现过,则不能再选 13 if(ok) { 14 A[cur] = i; 15 print_permutation(n, A, cur+1); // 递归调用 16 } 17 } 18 } //有点小疑问是对于这一个大数组A每次更新时把以前的数覆盖然后一直输出!!
19 int main() { 20 print_permutation(6, A, 0); 21 return 0; 22 }