递归函数的 C++ 错误
c++ Error From Recursive Function
#include<iostream>
#include<string>
#include<sstream>
#include<conio.h>
#include<vector>
#define MAX 100
using namespace std;
int size;
int getlargest(int arr[ ]){
static int max = -1000;
static int i = 0;
if(i < size){
if(arr[i] >= max){
max = arr[i];
i++;
}
getlargest(arr);
}
return max;
}
int main(){
int res;
cout << "enter the size please: ";
cin >> size;
int arr[MAX];
for(int i=0;i<size;i++){
cin >> arr[i];
}
res = getlargest(arr);
cout << res;
getch();
return 0;
}
我对递归函数的概念没有经验。 编写此代码是为了查找数组的最大元素。但是,我收到堆栈溢出错误。 谁能纠正它? 另外,我不知道确切的位置插入递归。
你有几个问题,都是小问题。
首先,你不会在数组中进行任何进展:你总是使用相同的参数进行调用,即整个数组。 递归的策略是做一些简单的事情,然后在再次调用时将问题减少到更小的问题。
在这种情况下,您有正确的概念:将一个元素与列表中其余最大的元素进行检查。 您确实会重复查找最大值,但不会减少列表。 您实际上也不能很好地使用列表max。 例如,请注意(在每次通话中)您将最大值返回到上一个级别......但是你根本不保存它。
试试这个:
- 从列表中删除第一个元素;
- 求余数的最大值;
- 返回这两个中较大的一个。
代码可能如下所示:
if(arr.size() == 1) {
return arr[0]
else {
max = getlargest(++arr);
if (arr[0] >= max)
max = arr[0]
}
return max;
请注意这里的小 C 技巧:++arr 将 arr 作为数组引用递增到下一个元素。 您可能已经将其视为字符指针和字符串变量。
好吧,您似乎正在尝试做一些比递归更容易使用循环做的事情。您可以像这样实现getlargest()
:
int getlargest(int arr[]) {
int max = arr[0]; // This is safer than initializing max with 0. What if arr[0] is the largest element and all elements are below 0?
for (int i = 0; i < size; ++i)
if (arr[i] > max)
max = arr[i];
return max;
}
我对递归函数的概念没有经验。
假设你想学习如何使用递归,你应该看看阶乘。使用递归函数找到整数i
的阶乘是不费吹灰之力的。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'