我是C ++的新手,想解决递归查找问题
使得输入以整数T(T≤100)开始,即测试用例的数量。
接下来的2 * T行中的每一行都将以整数N(1 例如

输入:

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


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

最佳答案

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

更改

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




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

09-07 07:46