//整数序列a1,a2,a3,….,an,给出求解最大值的递归程序
发布网友
发布时间:2023-11-14 10:57
我来回答
共2个回答
热心网友
时间:2024-08-29 11:12
int max(int a[],int len){//a为数组,len表示长度
int m;//定义m,表示最大值(结果)
if(len==1) return a[0];//如果只有一个元素,那么返回这个元素(即最大值)
m=max(a+1,len-1);//否则,令m等于除了第一个元素以外的最大元素
if(m<a[0]) m=a[0];//如果m<a[0],让m等于a[0],这就是求两个数最大值
return m;//返回m
}
比如数组arr[3]={2,3,1};
调用max(arr,3);
是这样的的:
调用max(arr,3)
由于len=3>1所以求arr[0]和max(arr+1,2)【就是后两个元素的最大值】的最大值
调用max(arr+1,2)
由于len=2>1所以求(arr+1)[0]【就是原来的arr[1]】和max(arr+2,1)的最大值
调用max(arr+2,1)
由于len=1,所以返回(arr+2)[0]【就是原来的arr[2],等于1】。
回到max(arr+1,2)中,已经知道(arr+1)[0]=3,而max(arr+2,1)刚才返回1,
3和1的最大值是3,返回3
回到max(arr,3)中,已经知道arr[0]=2,而max(arr+1,2)刚才返回3,
2和3的最大值是3,返回3
所以运行结果为3
热心网友
时间:2024-08-29 11:12
这个程序是线性选择算法,其实,这个算法在k比较小的时候(这里就是1了),已经退化为堆排序,而这道题,其实说是线性查找也没问题。