C++ 如何使这个递归函数从给定的起始位置返回最小的整数?

C++ 如何使这个递归函数从给定的起始位置返回最小的整数?,c++,C++,此递归函数将起始位置作为输入,并返回向量中从v[start]到v[v.size()-1]的最小整数。但是这个程序只是崩溃了。 有人知道我做错了什么吗? 谢谢大家的帮助 int Select_Smallest(const vector<int>&v, int start) { int small; if (v.size() == 1) { // if the vector has only 1 element return start;

此递归函数将起始位置作为输入,并返回向量中从
v[start]
v[v.size()-1]
的最小整数。但是这个程序只是崩溃了。 有人知道我做错了什么吗? 谢谢大家的帮助

int Select_Smallest(const vector<int>&v, int start) {
    int small;
    if (v.size() == 1) { // if the vector has only 1 element
        return start;
    }   

    if (v.size() > 1) {
        if (start == 0) {
            if (v[start] < v[start + 1]) {
                small = start;
            }
        }
    }
    if (Select_Smallest(v, start + 1)) {
        if (v[start] < v[start + 1]) {
            if (v[start - 1] > v[start]) { // checks if the number before is greater than start
                small = start;
            }
        } else {
            small = small;  // if start == the last element in the vector
        }
    }
    return small;   
}
int选择最小值(常量向量&v,int开始){
int小;
如果(v.size()==1){//如果向量只有1个元素
返回启动;
}   
如果(v.size()>1){
如果(开始==0){
如果(v[start]v[start]){//检查前面的数字是否大于start
小=启动;
}
}否则{
small=small;//如果start==向量中的最后一个元素
}
}
回报小;
}

您的代码中存在多个问题:

  • 当向量大小为1时,返回的
    start
    不是向量中的值
  • 始终使用索引
    start+1
    递归,并在偏移量
    start
    处访问向量,最终通过访问向量边界之外的内容导致未定义的行为
以下是一个更简单的方法:

  • 如果
    start
    大于或等于向量大小,则返回一些常规值,如
    INT_MAX
  • 否则调用
    选择参数为
    start+1
    的\u minimest
    ,并返回其中的最小值和索引
    start
    处的值
下面是一个简单的尝试:

int选择最小值(常量向量&v,int开始){
如果(开始<0)
开始=0;
如果(开始>=v.size())
返回INT_MAX;
其他的
返回最小值(v[开始],选择_最小值(v,开始+1));
}

此函数不使用尾部递归,因此除非编译器非常聪明,否则可能导致大数组的“强”>堆栈溢出< /强>。< /P>您需要传递另一个参数,这是迄今为止发现的最小整数。这是C++代码而不是C。它们是不同的语言,所以我更新了标记。