C++ 递归地在数组c+中查找max的位置+;

C++ 递归地在数组c+中查找max的位置+;,c++,recursion,max,C++,Recursion,Max,我已经用这个函数找到了最大元素 它在某些情况下有效,但在其他情况下它的位置错误,这就是我调用函数的情况 int maxElement=maxi(names,noOfTeams,0,1,sum,0) 这就是功能: int maxi(string names[],int sizee,int prev,int next,int scores[],int maxx) { if (sizee ==1)return 0; if (scores[maxx]<scores[next]

我已经用这个函数找到了最大元素 它在某些情况下有效,但在其他情况下它的位置错误,这就是我调用函数的情况

int maxElement=maxi(names,noOfTeams,0,1,sum,0)
这就是功能:

  int maxi(string names[],int sizee,int prev,int next,int scores[],int maxx)
{
    if (sizee ==1)return 0;
    if (scores[maxx]<scores[next]) maxx=next;
    if ((next+1)==sizee)return maxx;
    else return maxi(names,sizee,prev+1,next+1,scores,maxx);

}
int-maxi(字符串名称[],int-sizee,int-prev,int-next,int-scores[],int-maxx)
{
如果(sizee==1)返回0;

如果(分数[maxx]您需要将
分数[maxx]
分数[next]
进行比较,也不需要
prev

将您的函数更改为

int maxi(string names[],int sizee,int next,int scores[],int maxx)
{
    if (sizee ==1)
        return 0;
    if (scores[maxx]<scores[next])
        maxx=next;
    if ((next+1)==sizee)
        return maxx; 
    return maxi(names,sizee,next+1,scores,maxx);
    //You need to return, else the function will be called but that
    // value wont be returned.
}
int-maxi(字符串名称[],int-sizee,int-next,int-scores[],int-maxx)
{
如果(sizee==1)
返回0;

如果(分数[maxx]您需要将
分数[maxx]
分数[next]
进行比较,也不需要
prev

将您的函数更改为

int maxi(string names[],int sizee,int next,int scores[],int maxx)
{
    if (sizee ==1)
        return 0;
    if (scores[maxx]<scores[next])
        maxx=next;
    if ((next+1)==sizee)
        return maxx; 
    return maxi(names,sizee,next+1,scores,maxx);
    //You need to return, else the function will be called but that
    // value wont be returned.
}
int-maxi(字符串名称[],int-sizee,int-next,int-scores[],int-maxx)
{
如果(sizee==1)
返回0;

如果(分数[maxx],以下可能是更好的方法:

遍历数组中的每个元素,直到数组中还剩下一些元素,这些元素将作为基本情况。 然后在每个函数调用中,检查当前索引处的元素是否大于maxIndex处的元素,如果是,则更新max索引,并通过再次调用函数检查下一个数组元素,依此类推

请在下面查找递归查找最大元素和最大索引的代码:

#include <iostream>

using namespace std;

int findMax(int arr[], int size,int index, int max);
int findMaxIndex(int arr[], int size,int index, int maxIndex);

int main()
{
    int arr[] = {5,2,8,1,4};
    int len = sizeof(arr) / sizeof(int);

    cout << "Max is: " << findMax(arr, len, 0, arr[0]) << endl;
    cout << "Max Index is: " << findMaxIndex(arr, len, 0, 0) << endl;

    return 0;
}


int findMax(int arr[], int size, int index, int max)
{
    if (index == size)
        return max;

    if (arr[index] > max)
        max = arr[index];

    return findMax(arr, size, index + 1, max);
}

int findMaxIndex(int arr[], int size, int index, int maxIndex)
{
    if (index == size)
        return maxIndex;

    if (arr[index] > arr[maxIndex])
        maxIndex = index;

    return findMaxIndex(arr, size, index + 1, maxIndex);
}
#包括
使用名称空间std;
int findMax(int arr[],int size,int index,int max);
int findMaxIndex(int arr[],int size,int index,int maxIndex);
int main()
{
int arr[]={5,2,8,1,4};
int len=sizeof(arr)/sizeof(int);

下面的cout可能是一个更好的方法:

遍历数组中的每个元素,直到数组中还剩下一些元素,这些元素将作为基本情况。 然后在每个函数调用中,检查当前索引处的元素是否大于maxIndex处的元素,如果是,则更新max索引,并通过再次调用函数检查下一个数组元素,依此类推

请在下面查找递归查找最大元素和最大索引的代码:

#include <iostream>

using namespace std;

int findMax(int arr[], int size,int index, int max);
int findMaxIndex(int arr[], int size,int index, int maxIndex);

int main()
{
    int arr[] = {5,2,8,1,4};
    int len = sizeof(arr) / sizeof(int);

    cout << "Max is: " << findMax(arr, len, 0, arr[0]) << endl;
    cout << "Max Index is: " << findMaxIndex(arr, len, 0, 0) << endl;

    return 0;
}


int findMax(int arr[], int size, int index, int max)
{
    if (index == size)
        return max;

    if (arr[index] > max)
        max = arr[index];

    return findMax(arr, size, index + 1, max);
}

int findMaxIndex(int arr[], int size, int index, int maxIndex)
{
    if (index == size)
        return maxIndex;

    if (arr[index] > arr[maxIndex])
        maxIndex = index;

    return findMaxIndex(arr, size, index + 1, maxIndex);
}
#包括
使用名称空间std;
int findMax(int arr[],int size,int index,int max);
int findMaxIndex(int arr[],int size,int index,int maxIndex);
int main()
{
int arr[]={5,2,8,1,4};
int len=sizeof(arr)/sizeof(int);

您的函数中可能有几个错误

  • 线路

    else if (scores[prev]<scores[next])maxx=next;
    
    这是必须的

    else if (scores[maxx]<scores[next])maxx=next;
    //              ^^^^
    
    else
       return maxi(names,sizee,prev+1,next+1,scores,maxx);
    
  • 此外,还可以简化该功能

  • 参数
    name
    根本不使用。可以删除它
  • 参数
    prev
    也可以删除
  • 你们的两张支票可以合并成一张
  • 您不需要一系列的
    if-else
    语句
  • 这是一个简化的版本

    int maxi(int sizee, int next, int scores[], int maxx)
    {
       if ( sizee == next )
          return maxx;
    
       if (scores[maxx] < scores[next])
          maxx=next;
    
       return maxi(sizee, next+1, scores, maxx);
    }
    
    这应该是面向用户的函数。面向用户函数的实现可以使用递归函数作为实现细节

    int maxi(int sizee, int scores[])
    {
       return maxi(sizee, 0, scores, 0);
    }
    

    查看它的工作状态。

    您的函数中有几个错误

  • 线路

    else if (scores[prev]<scores[next])maxx=next;
    
    这是必须的

    else if (scores[maxx]<scores[next])maxx=next;
    //              ^^^^
    
    else
       return maxi(names,sizee,prev+1,next+1,scores,maxx);
    
  • 此外,还可以简化该功能

  • 参数
    name
    根本不使用。可以删除它
  • 参数
    prev
    也可以删除
  • 你们的两张支票可以合并成一张
  • 您不需要一系列的
    if-else
    语句
  • 这是一个简化的版本

    int maxi(int sizee, int next, int scores[], int maxx)
    {
       if ( sizee == next )
          return maxx;
    
       if (scores[maxx] < scores[next])
          maxx=next;
    
       return maxi(sizee, next+1, scores, maxx);
    }
    
    这应该是面向用户的函数。面向用户函数的实现可以使用递归函数作为实现细节

    int maxi(int sizee, int scores[])
    {
       return maxi(sizee, 0, scores, 0);
    }
    

    查看它的工作状态。

    这还不够清楚。数组类型是什么?名称是什么?是否已排序?
    否则maxi(名称、大小、上一个+1、下一个+1、分数、maxx);
    为什么不在此处使用返回值?
    常量auto maxementindex=std::distance(std::begin(分数)、std::max_元素(std::begin(分数)、std::end(分数))
    足够简单吗?这还不够清楚。数组类型是什么?名称是什么?是有序的?
    否则maxi(名称,大小,上一个+1,下一个+1,分数,maxx);
    为什么不在这里使用返回值?
    常量auto maxementindex=std::distance(std::begin(分数),std::max_元素(std::begin(分数),std::end(分数)))
    这够简单吗?匆忙做不好的咖喱,我太容易出错。希望现在一切都好匆忙做不好的咖喱,我太容易出错。希望现在一切都好