C语言求N个数的最大值,递归算法

有哪个高手能详细说明一下,谢谢了。
请高手能清楚的写出源代码谢谢,小弟新手。

#include<stdio.h>

int max(int n,int numbers[],int index)
{
if(index<(n-1)){
if(numbers[index]>numbers[index+1])
numbers[index+1]=numbers[index]; //没到最后位则把大数放后面
index++;
return max(n,numbers,index);
}
else if(index==(n-1)){
return numbers[index]; //到最后位直接返回最后位就是最大的
}
else{
return -1; //error,数组越界时返回-1
}

}
void main()
{
int numbers[]={1,3,8,2,4,6};
int N=6;
printf("max number is %d\n",max(N,numbers,0));
}

我写了注释,自己揣摩下应该能懂
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-02
#include<stdio.h>
#define MAX_SIZE 1024 //输入个数的最大值

/*@@ getMax的参数为curr(当前下标,数组,数组大小,当前最大值) @@*/
void getMax(int curr,int arr[],int n,int &currMax)
{
if(curr>=n)//递归到当前下标curr<n
return;
if(arr[curr]>currMax)//如果当前数值arr[curr]比当前最大值大,则更换最大值
currMax=arr[curr];
getMax(curr+1,arr,n,currMax);//子递归
}

int main()
{
int i,n,max;
int arr[MAX_SIZE];
puts("请输入个数n:");
scanf("%d",&n);
printf("请输入%d个数:\n",n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
getMax(0,arr,n,max);
printf("最大的值为: %d\n",max);
return 0;
}
第2个回答  2010-06-03
int Max(int a[],int n)
{
//n为数组的长度
if(n=1)
{ return a[0];}
int av1=a[0]; //取出第一个数
int* atmp=a;
atmp++;
int av2=Max(atmp,n-1); //对第一个后面的数组所有数求最大值
return (av1>av2)?av1:av2;
}
相似回答