C++ 递归函数的堆栈溢出错误

C++ 递归函数的堆栈溢出错误,c++,recursion,C++,Recursion,我对递归函数的概念没有经验。编写此代码是为了查找数组的最大元素。但是,我得到一个堆栈溢出错误。有人能纠正吗?另外,我不知道在哪里插入递归。您有几个问题,都很小 首先,在数组中不前进:始终使用相同的参数调用,即整个数组。递归的策略是做一些简单的事情,然后在再次调用时将问题缩小到更小的程度 在本例中,您的概念是正确的:将一个元素与列表其余部分中最大的元素进行比较。您确实会重复查找最大值,但不会减少列表。实际上,您也不能很好地使用列表最大值。例如,请注意,每次调用时,您都会将最大值返回到上一级别。。。

我对递归函数的概念没有经验。编写此代码是为了查找数组的最大元素。但是,我得到一个堆栈溢出错误。有人能纠正吗?另外,我不知道在哪里插入递归。

您有几个问题,都很小

首先,在数组中不前进:始终使用相同的参数调用,即整个数组。递归的策略是做一些简单的事情,然后在再次调用时将问题缩小到更小的程度

在本例中,您的概念是正确的:将一个元素与列表其余部分中最大的元素进行比较。您确实会重复查找最大值,但不会减少列表。实际上,您也不能很好地使用列表最大值。例如,请注意,每次调用时,您都会将最大值返回到上一级别。。。但你根本就没有保存它

请尝试以下方法:

从列表中删除第一个元素; 求余数的最大值; 返回这两个中较大的一个。 代码可能如下所示:

#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;
}
if(arr.size() == 1) {
    return arr[0]
else {
    max = getlargest(++arr);
    if (arr[0] >= max)
        max = arr[0]
}
return max;

注意这里的小C技巧:++arr将arr作为数组引用递增到下一个元素。您可能已经将其视为一个字符指针和字符串变量。

好吧,似乎您正在尝试使用循环来做一些比递归更容易的事情。您可以这样实现GetMax:

#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;
}
if(arr.size() == 1) {
    return arr[0]
else {
    max = getlargest(++arr);
    if (arr[0] >= max)
        max = arr[0]
}
return max;
我对递归函数的概念没有经验


假设您想学习如何使用递归,您应该看看。使用递归函数查找整数i的阶乘是很容易的。

您应该缩进上面的代码,以便更容易阅读。对于您的问题,请注意getMaximum调用本身与它得到的数组相同-没有任何更改,因此递归没有终止的机会。你需要推动一些东西-你可以在指针上执行+,或者你可以保持数组的全局性并且只在索引i上重复。