任务描述
本关任务:编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决。
相关知识
可以根据数组下标来设置递归执行的调用以及终止条件。 要计算数组a从起始序号start
到结束序号end
之间数组元素的最大值: (1)如果数组a
起始序号start
等于结束序号end
,那么返回值为此序号数组元素值a[start]
。 (2)如果数组a
起始序号start
小于结束序号end
,那么返回值为a[start]
与数组a
从start+1
到end
的之间最大值的最大值。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
输入样例: 5
92 18 77 6 15
输出样例: 92
输入格式: 数组中的数字均为整型数,输入的第一个数为数组长度,后续为数组的所有元素。
输出格式: 该数组的最大值
#include <stdio.h>
#define N 20
int max(int a,int b);
int Func(int a[],int s,int e);
int main()
{
int a[N], m;
int i,n,s,e;
//printf("输入整数个数:");
scanf("%d",&n);
//printf("输入%d个整数:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
m = Func(a,0,n-1) ;
printf("%d\n",m);
return 0;
}
/**********定义Max()函数**********/
int max(int a,int b)
{
/********** Begin **********/
return (a > b) ? a : b;
/********** End **********/
}
/**********定义Func()函数**********/
int Func(int a[],int s,int e)
{
/********** Begin **********/
if (s == e)
return a[s]; // Base case: if only one element, return it
int mid = (s + e) / 2;
int left_max = Func(a, s, mid); // Maximum in left half
int right_max = Func(a, mid + 1, e); // Maximum in right half
return max(left_max, right_max); // Return the maximum of both halves
/********** End **********/
}