//整数序列a1,a2,a3,….,an,给出求解最大值的递归程序
来源:百度知道 编辑:UC知道 时间:2024/05/17 01:51:48
//整数序列a1,a2,a3,….,an,给出求解最大值的递归程序
#include"stdio.h"
#define N 10
int max(int a[],int len){
int m;
if(len==1) return a[0];
m=max(a+1,len-1);
if(m<a[0]) m=a[0];
return m;
}
void main()
{int arry[N],i,k;
for(i=0;i<N;i++)
scanf("%d",&arry[i]);
k=max(arry,N);
printf("%d",k);
}
请帮我解释一下,好的追加分,,
解释max()的关键部分就可以了,递归很难明白请高手详细点
详细是重点。。不然。。。
#include"stdio.h"
#define N 10
int max(int a[],int len){
int m;
if(len==1) return a[0];
m=max(a+1,len-1);
if(m<a[0]) m=a[0];
return m;
}
void main()
{int arry[N],i,k;
for(i=0;i<N;i++)
scanf("%d",&arry[i]);
k=max(arry,N);
printf("%d",k);
}
请帮我解释一下,好的追加分,,
解释max()的关键部分就可以了,递归很难明白请高手详细点
详细是重点。。不然。。。
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
这个程序是线性选择算法,其实,这个算法在k比较小的时候(这里就是1了),已经退化为堆排序,而这道题,其实说是线性查找也没问题。
若分式a-1/a+2的值为整数,求a的整数值
若分式a+2/a-1的值为整数,求a的整数值
要使(a+1)/(a-1)为整数, 求整数a的取值. 这类题咋想啊
若( a+1)/(a-1)是整数,那么求整数a的取值?这类题怎么想啊
A是整数,[2A-7]/[A-2]是正整数,求A的值
家长无忧3.001 /序列
a/b*10=a/b+10 则a+b(A,B都是整数)的最小值是
a,b,c是任意三个整数,则a+b/2,b+c/2,a+c/2中整数的个数有( )
C语言根据无穷序列求sum=10/1!+9/2!+A 之前10项之和
AABBCC/A/B/C=整数 ......这样的等式,谁能写得出?