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(分数)))
这够简单吗?匆忙做不好的咖喱,我太容易出错。希望现在一切都好匆忙做不好的咖喱,我太容易出错。希望现在一切都好