递归算法打印给定显示?

时间:2015-11-01 11:03:54

标签: recursion permutation

我正在处理一个处理递归的问题。我应该将两个int传递给一个函数,它代表了一些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来更改数组的结尾,看起来数组更改。 任何帮助将不胜感激,谢谢你的时间。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

因此,出于好奇,循环(迭代)版本会是什么样子? 我假设它是基于N和nr_vals的嵌套循环?