所以我想知道如何编写一个非递归函数来打印给定 N 和 r 的所有排列,其中r^N
给出了排列的总数。
Example: N = 3, r = 2, total permutations = 8
output:
000
001
010
011
100
101
110
111
这是我尝试过的,但当然它只适用于一种情况:
void perm_iter(int N, int nr_vals){
int pos = N-1;
int i,j,k;
int P_array[N];
for(i=0;i<N;i++){
P_array[i] = 0;
}
int val_array[nr_vals];
for(i=0;i<nr_vals;i++){
val_array[i] = i;
}
do{
for(i=0;i<N;i++){
for(j=0;j<nr_vals;j++){
P_array[pos-1] = val_array[j];
for(k=0;k<nr_vals;k++){
P_array[pos] = val_array[k];
for(i=0;i<N;i++){
printf("%d",P_array[i]);
}
printf("\n");
}
}
pos--;
}
}while(pos > 0);
}