开发者社区> 问答> 正文

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

有哪个高手能详细说明一下,谢谢了。

展开
收起
知与谁同 2018-07-16 12:01:12 4955 0
3 条回答
写回答
取消 提交回答
  • 12535
    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;
    }
    2019-07-17 22:54:52
    赞同 展开评论 打赏
  • #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;
    }
    2019-07-17 22:54:51
    赞同 展开评论 打赏
  • #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));
    }

    我写了注释,自己揣摩下应该能懂
    2019-07-17 22:54:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
图解算法小抄 立即下载
面试常考算法 立即下载
数据+算法定义新世界 立即下载