1、环境配置:
- 系统:win10
- 编程语言:C++
- 编译器:DevC++
2、算法思想:
- 思路:比较n和剩下的n-1个当中的最大值,依次找下去,直到最后一项返回,返回的递归函数就是从倒数的两项中找一个最大的返回继续和倒数第三项比较,然后继续重复。
- 实现:用l表示首项,h表示最后一项,l不断增加,在a[l]和剩下的a[l+1]到a[h]相比较,如果l和h相等就返回a[l]。
3、代码:
#include<iostream>//不想OI一场空,千万别用万能头
using namespace std;
int find(int l,int h,int a[]);
int min(int a,int b);
//主函数
int main()
{
int A[] = {100,22,88,44,55};
for(int i=0;i<sizeof(A)/sizeof(A[0]);i++){
cout<<A[i]<<",";
}
cout<<""<<endl;
int M = find(0,4,A);
cout<<"M:"<<M<<endl;
return 0;
}
//两数找最大值
int max(int a,int b){
if(a > b){
return a;
}
else{
return b;
}
}
//找最大值函数
int find(int l,int h,int a[]){
if(l == h){
return a[l];
}
else{
return(max(a[l],find(l+1,h,a)));
}
}
4、结果展示:
找最大值结果.png5、反思总结:
在测试当中这段代码出了问题,原因就是z的初始值问题,如果存在比a[i]小的项,那么z在for循环中会被替换,但是如果不存在比a[i]小的项,比如所有项目都是排好序的,那么for循环当中的条件语句就不会执行,z值也就不会改变,如果一开始给z赋值是0,就会出现问题。
网友评论