第4关:编写递归函数求数组元素的最大值


任务描述

本关任务:编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决。

相关知识

可以根据数组下标来设置递归执行的调用以及终止条件。 要计算数组a从起始序号start到结束序号end之间数组元素的最大值: (1)如果数组a起始序号start等于结束序号end,那么返回值为此序号数组元素值a[start]。 (2)如果数组a起始序号start小于结束序号end,那么返回值为a[start]与数组astart+1end的之间最大值的最大值。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

输入样例: 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 **********/
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一些 C++ 中的函数练习题: 1. 编写一个函数,计算 n 的阶乘 ```cpp int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } ``` 2. 编写一个函数,计算斐波那契数列的第 n 项 ```cpp int fibonacci(int n) { if (n == 0 || n == 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } ``` 3. 编写一个函数,计算一个数字的二进制表示中 1 的个数 ```cpp int countOnes(int n) { if (n == 0) { return 0; } else { return (n % 2 == 1) + countOnes(n / 2); } } ``` 4. 编写一个函数,计算一个数字的反转 ```cpp int reverse(int n) { if (n < 10) { return n; } else { return (n % 10) * pow(10, floor(log10(n))) + reverse(n / 10); } } ``` 5. 编写一个函数,计算一个字符串的长度 ```cpp int stringLength(string str) { if (str == "") { return 0; } else { return 1 + stringLength(str.substr(1)); } } ``` 6. 编写一个函数,判断一个字符串是否是回文字符串 ```cpp bool isPalindrome(string str) { if (str.length() <= 1) { return true; } else if (str[0] != str[str.length() - 1]) { return false; } else { return isPalindrome(str.substr(1, str.length() - 2)); } } ``` 7. 编写一个函数,计算一个数组中所有元素的和 ```cpp int arraySum(int arr[], int size) { if (size == 0) { return 0; } else { return arr[0] + arraySum(arr + 1, size - 1); } } ``` 8. 编写一个函数,计算一个数组中所有元素的平均 ```cpp double arrayAverage(int arr[], int size) { if (size == 0) { return 0; } else { return (arr[0] + (size - 1) * arrayAverage(arr + 1, size - 1)) / size; } } ``` 9. 编写一个函数,计算一个数组中的最大 ```cpp int arrayMax(int arr[], int size) { if (size == 1) { return arr[0]; } else { return max(arr[0], arrayMax(arr + 1, size - 1)); } } ``` 10. 编写一个函数,计算一个数组中的最小 ```cpp int arrayMin(int arr[], int size) { if (size == 1) { return arr[0]; } else { return min(arr[0], arrayMin(arr + 1, size - 1)); } } ``` 希望这些练习题能够帮助你练习 C++ 中的函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值