c++ - 递归查找数组中最大值的位置c++

标签 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]) maxx=next;
    if ((next+1)==sizee)return maxx;
    else return maxi(names,sizee,prev+1,next+1,scores,maxx);

}

最佳答案

您的函数中有几个错误。

  1. else if (scores[prev]<scores[next])maxx=next;
    

    需要

    else if (scores[maxx]<scores[next])maxx=next;
    //              ^^^^
    
  2. 您在递归调用中缺少 return。而不是

    else maxi(names,sizee,prev+1,next+1,scores,maxx);
    

    应该是

    else
       return maxi(names,sizee,prev+1,next+1,scores,maxx);
    

此外,还可以简化功能。

  1. 根本没有使用参数name。它可以被移除。
  2. prev 参数也可以删除。
  3. 您拥有的几张支票可以合二为一。
  4. 您不需要一系列 if-else-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[]);

那应该是面向用户的功能。面向用户的函数的实现可以使用递归函数作为实现细节。

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

http://ideone.com/chvtPA 查看它的工作情况.

关于c++ - 递归查找数组中最大值的位置c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664024/

相关文章:

sql-server - 如何将基于 CURSOR 的查询转换为基于 SET 的查询

sql - 一次使用 charindex、max、substring/right 函数

sql - 如何使 MySQL MAX() 将 NULL 视为最小可能值?

C++ 使用 `const int` 作为循环变量?

c++ - 在打印 "Here"之前,临时 A(3) 不应该被销毁吗?

c - 仅使用递归编写 C 函数

java - 给定一串字符时查找所有有效单词(递归/二进制搜索)

java - 如何计算最小值、最大值、总和和平均值

c++ - 对通过引用传递给它的第一个元素的数组进行操作

c++ - 将 char* 复制到指定位置的 std::string 不分配新对象