这个代码的递归形式是什么

what is the recursive form of this code?

本文关键字:是什么 递归 代码      更新时间:2023-10-16

我试图在向量b中定位向量a。所以这就像如果向量a在向量b,那么返回true,否则返回false。向量a应该像{1,2,3},b应该像{4,1,2,3,5,7}。这段代码的输出类似于true 1和false 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;
}

如果您只是不喜欢输出: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;

你会得到正确的答案,而正确的答案是错误的。

检查你的算法!

您看到"true 1"answers"false 0"的原因可能是,当您在函数中将"true"answers"false"打印为字符串时,您会返回一个bool,如果您在函数外打印,则默认打印为"1"answers"0"。为了克服这一点,您可以使用这里讨论的std::boolalpha:在C++中将布尔转换为文本

至于将您的算法转换为递归算法,恐怕在您自己尝试之前,这是Stack Overflow的主题。

正如John所说,您打印的是cout(标准输出)字符串,而不是整数(1/0)。另外,你需要提出解决方案并寻求帮助/建议/反馈。网上有很多关于如何使用它的教程

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

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

这个的递归函数:

// 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);

注:未编译。