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
- 否则调用
,并返回其中的最小值和索引选择参数为
的\u minimeststart+1
处的值start
int选择最小值(常量向量&v,int开始){
如果(开始<0)
开始=0;
如果(开始>=v.size())
返回INT_MAX;
其他的
返回最小值(v[开始],选择_最小值(v,开始+1));
}
此函数不使用尾部递归,因此除非编译器非常聪明,否则可能导致大数组的“强”>堆栈溢出< /强>。< /P>您需要传递另一个参数,这是迄今为止发现的最小整数。这是C++代码而不是C。它们是不同的语言,所以我更新了标记。