既然你不提及任何語言這裏的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