递归查找优化

时间:2016-02-02 01:20:52

标签: c++ recursion

我是c ++的新手,想要解决递归查找问题 这样输入以整数T(T≤100)开始,即测试用例的数量。 接下来的2 * T行中的每一行将以整数N(1 <= N <= 100)开始,整数个数后跟N空格分开。这些N个整数中的每一个将在-1000和1000(包括)之间。然后下一行将具有X(-1000 <= X <= 1000),表示要搜索的数字。 例如

输入:

2

5 5 13 -11 19 93

-19

3 15 65 -18

-18

输出应为

案例1:否

案例2:是

解决问题的代码是

#include <iostream>
#include <sstream>
using namespace std;
bool find(int values[],int x,int i);
int main(){
        int  n, len,x ;
        cin >> n;
        std::ostringstream oss;
        for(int i =1;i<=n;i++){
                cin >> len;
                int values [len];
                for (int j =0;j<len;j++){
                        cin >> values[i];
                }
                cin>>x;

                oss<< "Case "<< i << ": " << (find(values,x, (len-1))?"YES":"NO") << "\n";
        }
        cout << oss.str() << endl;
        return 0;
}

bool find(int values [],int x, int i){
        if(values[i] ==x)
                return true;
        else{
                if(i ==0)
                        return false;
                return find(values,x,i-1);
        }
}

代码在我的设备上正常运行,但是,提交时会导致分段错误。 我哪里做错了?

1 个答案:

答案 0 :(得分:1)

看起来您正在使用变量 i 迭代测试用例的数量,但您正在使用该变量将整数读入数组中的某个索引。您应该使用变量 j 将整数读入数组。

更改

for (int j = 0; j < len; j++){
    cin >> values[i];
}

for (int j = 0; j < len; j++) {
    cin >> values[j];
}