【问题标题】:what is the recursive form of this code?这段代码的递归形式是什么?
【发布时间】:2014-12-07 14:56:47
【问题描述】:

我试图在向量 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;
}

【问题讨论】:

  • 如果你不想要 1 或 0 在 o/p 那么你想要什么?
  • 我只想要真假

标签: c++ loops data-structures vector


【解决方案1】:

this的递归函数:

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

注意:未编译。

【讨论】:

  • 谢谢您,但是如果不添加两个额外参数,我将如何执行以下操作?
  • 那么你已经声明了全局变量。在递归中,您将需要维护数组 (a,b) 的状态。
  • 那么如果没有这些参数和全局变量,我该怎么办?我的意思是有办法做到这一点吗?
【解决方案2】:

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

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

检查你的算法!

【讨论】:

  • 所以我检查了它但无法弄清楚出了什么问题?
  • 我觉得你还是自己去看看吧。对你有好处~注意:重点是向量a而不是向量b。一定要确保a中的数据在b中,而不是b中的数据在a中
【解决方案3】:

就像约翰说的那样,您打印的是 cout(标准输出)字符串,而不是整数 (1/0)。也同意题外话,您需要提出解决方案并寻求帮助/建议/反馈。网上有很多关于如何做的教程。

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 还有其他方法可以做这件事吗?
    • 输出只能以真假的形式出现,而不是1和0
    • 您确实意识到01falsetrue 值对吗?
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2012-01-18
    • 2019-10-28
    • 2015-01-21
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多