C ++:使用递归和引用变量在数组中查找max元素

时间:2016-05-04 13:51:13

标签: c++ recursion

我在findMax函数中遇到问题,使用数组中的递归find max元素(代码C ++):

void findMax (int& imax, int n, int* arr){
    imax=arr[0]?arr[0]:0;
    if(n > 0){
        imax = std::max(arr[n],findMax(imax, n-1, arr)); // error here: No matching function for call to max???
    }
}

你能解释一下这个错误的原因和解决方案吗?

谢谢,

2 个答案:

答案 0 :(得分:3)

std::max将返回两个值中较大的一个,但findMax的返回类型为void

void findMax (int& imax, int n, int* arr)

所以它正在寻找

std::max(int, void)

显然不存在。

答案 1 :(得分:2)

除了更改函数以返回int之外,您可以在范围有效时执行findmax,然后仅使用返回值调用std :: max。

void findMax (int& imax, int n, int* arr){
    imax=arr[0]?arr[0]:0;
    if(n > 0){
        findMax(imax, n-1, arr);
    }
    imax = std::max(arr[n], imax);
}

@CoryKramer是正确的,但错误确实没有在你的例子中将int传递给max。如果您只是想解决这个问题,可以使用这个备用解决方案:

int findMax (int& imax, int n, int* arr){
    imax=arr[0]?arr[0]:0;
    if(n > 0){
        imax = std::max(arr[n],findMax(imax, n-1, arr));
    }
    return imax;
}