打印给定显示的递归算法?
recursive algorithm to print given display?
我正在处理递归问题。我应该将两个整数传递给一个函数,它代表我必须找到所有排列的多个 N 对象和 M 值。我还得到了输出应该是什么样子的样本
void perm_rec_1(int N, int nr_values)
这应该打印的输出是:
Called : perm_rec_1(3, 2);
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
我理解递归的概念,即使用交换函数更改字符串的顺序以查找字符串的所有排列,但我不确定如何在此处应用它,或者它是否可以应用。看起来数组的变化是通过将元素增加 1 来更改数组的末尾,直到 nr_vals-1。
如有任何帮助,我们将不胜感激,感谢您抽出宝贵时间。
因为你没有提到任何语言这里是 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
出于好奇,循环(迭代)版本会是什么样子?
我假设它是基于 N 和 nr_vals?
的嵌套循环
我正在处理递归问题。我应该将两个整数传递给一个函数,它代表我必须找到所有排列的多个 N 对象和 M 值。我还得到了输出应该是什么样子的样本
void perm_rec_1(int N, int nr_values)
这应该打印的输出是:
Called : perm_rec_1(3, 2);
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
我理解递归的概念,即使用交换函数更改字符串的顺序以查找字符串的所有排列,但我不确定如何在此处应用它,或者它是否可以应用。看起来数组的变化是通过将元素增加 1 来更改数组的末尾,直到 nr_vals-1。 如有任何帮助,我们将不胜感激,感谢您抽出宝贵时间。
因为你没有提到任何语言这里是 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
出于好奇,循环(迭代)版本会是什么样子? 我假设它是基于 N 和 nr_vals?
的嵌套循环