#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;
}
我对递归函数的概念没有经验。编写此代码是为了找到数组的最大元素。但是,我收到堆栈溢出错误。任何人都可以纠正吗?另外,我并不确切知道插入递归的位置。
答案 0 :(得分:1)
你有几个问题,都很小。
首先,你不进行数组的进展:你总是使用相同的参数调用,即整个数组。递归策略是做一些简单的事情,然后再次调用时将问题减少到更小的范围。
在这种情况下,你有概念权利:检查一个元素与列表其余部分的最大值。你做重复找到最大值,但你没有减少列表。你也没有真正使用最大列表。例如,请注意(在每次通话时)您将最高级别返回到上一级别...但您根本不保存它。
请改为尝试:
代码可能如下所示:
if(arr.size() == 1) {
return arr[0]
else {
max = getlargest(++arr);
if (arr[0] >= max)
max = arr[0]
}
return max;
注意这里的小C技巧:++ arr将 arr 作为数组引用递增到下一个元素。您可能已经将此视为字符指针和字符串变量。
答案 1 :(得分:1)
好吧,似乎你正在尝试做一些比循环更容易做的事情。您可以像这样实施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;
}
我对递归函数的概念没有经验。
假设您想学习如何使用递归,您应该看一下factorial。使用递归函数找到整数i
的阶乘是一个明智的选择。