这段代码的递归形式是什么?

时间:2014-10-13 05:15:53

标签: c++ loops data-structures vector

我试图在矢量b中找到矢量a。因此,如果向量a在向量b中,则返回true,否则返回false。矢量a应该像{1,2,3},b应该像{4,1,2,3,5,5,7}。这段代码的输出结果为真1和假0.所以我的问题是我不希望1和0出现在输出中。 另外我想以递归形式编写这段代码,所以有人可以帮我解决这个问题吗?

    bool x(vector<int>& a, vector<int>  b)
{
    vector<int> index ( b.size(),0 );
    int counter = 0;

    if ( a.size() <= b.size() ) {

        for ( int i = 0; i < a.size(); i++ ) {
            for ( int j = 0; j < b.size(); j++ ) {
                if ( a[i]== b[j]) {
                    index[j] = 1;
                }
            }
        }

        for ( int i = 0; i < index.size(); i++ ) {
            if ( index[i] == 1 ) {
                for ( int j = i; j < index.size(); j++ ) {
                    if ( index[j] == 1 ) {
                        counter++;
                    }
                }
                if(counter == a.size()){
                    cout<<"true"<<endl;
                    return true;
                    break;
                }
                else{
                    counter = 0;
                    cout<<"false"<<endl;
                    return false;
                  //  continue;
                }

            }
        }
    }
     return 0;
}

4 个答案:

答案 0 :(得分:1)

如果你不喜欢输出:true 1和false 0.最简单的解决方法是: if(x(a, b)){ cout<<"true"<<endl; } else { cout<<"false"<<endl; }

但是,在尝试将算法转换为递归算法之前,我担心你的算法是错误的。试试这个: vector<int> a; vector<int> b; a.push_back(1); a.push_back(2); a.push_back(3); b.push_back(1); b.push_back(1); b.push_back(1); cout<<x(a,b)<<endl;

你会成真,而正确的答案是错误的。

检查你的算法!

答案 1 :(得分:0)

你看到“true 1”和“false 0”的原因可能是因为当你在函数中打印“true”和“false”作为字符串时,你会返回一个bool,如果你在函数外部打印将会默认打印为“1”和“0”。要解决此问题,您可以使用std::boolalpha,如此处所述:Converting bool to text in C++

至于将你的算法转换为递归算法,我担心Stack Overflow的主题是你自己尝试的。

答案 2 :(得分:0)

就像John说的那样,你打印的是cout(标准输出)字符串,而不是整数(1/0)。同意偏离主题,您需要建议解决方案并寻求帮助/建议/反馈。网上有很多关于如何使用它的教程。

但是如果你想要递归,你应该创建一个array3,其长度与array1的大小相同,而你将对array2进行递归,以检查array1中是否存在array2的任何元素(作为对象或值)。你需要一个生成数组并接受数组的函数(为什么使用向量?)然后遍历第二个数组,将array1,array3和当前索引值作为参数传递。

Fibonacci递归问题几乎在Uni的每一个编程课程中讲授(或者至少它应该是),所以这是一个很好的起点。

答案 3 :(得分:0)

这个的递归函数:

// it will return true if vector is present
// i is pointer for a 
// j is pointer for b
bool subVector(vector<int>& a, vector<int>  b,i,j)
{
    if( i<a.size() && j<b.size()
    {
        if(a[i]==b[i])
        {
            return subVector(a,b,i+1,j+1)
        }
        else
        {
            return subVector(a,b,0,j+1)
        }
    }
    else
    {
        if(i>a.size())
        {
            return true;
        }
        else{
          return false;
        }
    }       
}
// Calling
subVector(a,b,0,0);

注意:未编译。