关闭

[置顶] 递归求序列最大最小值

标签: 递归算法二分
948人阅读 评论(0) 收藏 举报
分类:

这学期总算开了算法课了,不得不吐槽,大四上学期开这课,时间很尴尬。不多说了,第一节课老师留了道题,要求在一个递归函数里求序列的最大最小值。


算法思路:
1)如果数组长度为1,则最大值与最小值相等
2)如果数组长度为2,则最大值与最小值各位其中一个。
3)如果数组长度大于2,那么采用二分策略,递归求前一半的最大最小值,与后一半的最大最小值,之后两两比较后的数组的最大最小值。


代码如下:

#include <iostream>
#include <cmath>
using namespace std;

bool MinMax(int* num , int start, int end , int& Min , int& Max)
{
    //end小于start没有意义 
    if(end <start){
        return false;
    }else if(end == start){
        //序列长度为1,最大值与最小值相等 
        Min = Max = num[start];
    }else if(end - start == 1){
        //序列长度为2,一个为最小值,一个为最大值 
        Min = min(num[start],num[end]);
        Max = max(num[start],num[end]);
        return true;
    }else{
        //序列长度大于2,递归找前一半的最大最小值
        //后一半的最大最小值,两者进行比较 
        int mid = (start + end) / 2;
        int tmp_max,tmp_min;
        MinMax(num,start,mid,tmp_min,tmp_max);
        MinMax(num,mid+1,end,Min,Max);
        Max = max(tmp_max,Max);
        Min = min(tmp_min,Min);
        return true;
    }
}

int main()
{
    int size;
    cin>>size;
    int* num,Min,Max;
    num = new int[size];
    for(int i = 0 ; i< size; i++){
        cin>>num[i];
    }
    if(MinMax(num,0,size-1,Min,Max)){
        cout<<"Max = "<<Max<<endl;
        cout<<"Min = "<<Min<<endl;  
    }

    return 0;
}

截图:
这里写图片描述

0
0
查看评论

递归求数组的最大值,主要说下递归执行的过程

闲着也是闲着,加深下递归执行的过程。 一:代码(主要是观察递归的过程,不要在意代码。。。) 二:过程 1、调试程序,添加查看n的值 2、进入递归函数,可以看到n=3,不<=0 执行过程图示 3、再次调用max函数,执行n=2,也不<=0 4、再进入max函数,n=1,也不&l...
  • u013082989
  • u013082989
  • 2016-03-02 23:59
  • 6030

java递归查找最小数

class 递归找最小数 { public static void main(String[] args) { int[] arr={999,997,998,245,25,34534,6,547,98,88,9,72,4,4,13}; int n=arr.length; System...
  • ylqhust
  • ylqhust
  • 2014-12-13 21:12
  • 418

递归求最大最小值算法 分治策略(c语言实现)

思路:运用分治的思想,将要排序的整个数组从中间劈开,分别求其左右两边的最大最小值,然后将求出的最大最小值合起来进行比较。     当左右两边的数组小到一定程度时:(1)数组中只有一个元素,maxNum=minNum; ·     ...
  • catkint
  • catkint
  • 2016-03-28 21:02
  • 3107

蓝桥杯训练:递归——求N个数的最大值

问题描述:求N个数的最大值 作者:何知令 完成时间:2017年6月3日 代码: /* 问题描述:求N个数的最大值 作者:何知令 完成时间:2017年6月3日 */ #include using namespace std; int getMax(int n) { if(n==0) ...
  • qq_36203090
  • qq_36203090
  • 2017-06-05 12:32
  • 296

递归求数组最大最小值(分治思想)

求数组最大最小值我们可以用遍历或者最简单的排序方法来实现,但是那样子的时间复杂度将会大很多,因此我们可以采用分治思想来求最大最小值,即先求左右两部分,即先求出左半部分的最大最小值,再求出右半部分的最大最小值,然后再把左右两部分的最大最小值合起来求总的最大最小值。 代码如下: #include...
  • chenhuajie123
  • chenhuajie123
  • 2013-09-13 19:53
  • 7547

递归求序列最大最小值

这学期总算开了算法课了,不得不吐槽,大四上学期开这课,时间很尴尬。不多说了,第一节课老师留了道题,要求在一个递归函数里求序列的最大最小值。算法思路: 1)如果数组长度为1,则最大值与最小值相等 2)如果数组长度为2,则最大值与最小值各位其中一个。 3)如果数组长度大于2,那么采用二分策略,递归...
  • qq_30091945
  • qq_30091945
  • 2017-08-24 16:45
  • 948

数组最大值(递归)

  • 2013-10-19 09:56
  • 354B
  • 下载

求序列之和——递归

【题】 求序列之和——递归 请使用递归算法求下列序列的前n项之和。             1 + 1/2 - 1/3 + 1/4 -1/...
  • debug__boy
  • debug__boy
  • 2012-11-30 10:03
  • 1663

求序列的最大最小值

单求最大或最小值需要遍历整个序列,复杂度O(n)。 当同时求最大和最小值时,可以将序列的每一对相邻元素先做比较,然后与当前的最大值最小值进行比较,来决定是否更新。这样每两个元素之间需要3次比较。 代码如下: // maxmin.cpp : 定义控制台应用程序的入口点。 // #include...
  • u011575841
  • u011575841
  • 2017-10-06 22:14
  • 65

利用递归实现n个数中的最大值 和最小值

# include # define N 200 int findmax(int a[],int n); int main() { int n,a[N],i; printf("请输入n的值:\n"); scanf("%d",&n); for(i...
  • qjt19950610
  • qjt19950610
  • 2015-07-23 09:22
  • 1386
    个人资料
    • 访问:155550次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论