既然你不提及任何语言这里的C++版本:
#include <iostream>
void perm_rec_1_aux(int *values, int N, int nr, int curr, int idx);
void print_val(int * values, int N);
void perm_rec_1(int N, int nr){
int * values = new int[N]; //replace with malloc for C
for(int i= 0; i<nr; i++)
perm_rec_1_aux(values, N, nr, i, 0);
delete [] values; //replace with free for C
}
void print_val(int * values, int N){
// use printf for C
for(int i = 0; i<N; i++)
std::cout<< values[i]<<" ";
std::cout<<std::endl;
}
void perm_rec_1_aux(int *values, int N, int nr, int curr, int idx){
values[idx] = curr;
if(idx+1 == N)
return print_val(values, N);
for(int i=0; i<nr; i++)
perm_rec_1_aux(values, N, nr, i, idx+1);
}
int main() {
perm_rec_1(3, 2);
std::cout<<"--\n";
perm_rec_1(2, 3);
return 0;
}
输出:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
--
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
这样的问题更容易用循环修复。它只是基于“nr_values”和“N”数字进行计数,任何递归只会比平坦循环更复杂,当您有固定数量的应该被置换的元素时,递归更有用(在这里您可以找到所有组合都是“计数“) – GameDeveloper
至少有编程语言? – GameDeveloper
我正在使用c。我同意你的看法,而这也是我需要做的。我需要完成的任务是找到这些排列以及迭代(循环)算法的递归设计。我想我接近于解决迭代的问题。 – JustaRedShirt