首页 文章

递归算法打印给定显示?

提问于
浏览
1

我正在处理一个处理递归的问题 . 我应该将两个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 回答

  • 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
    
  • 0

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

相关问题