qingcheng奕  

//我的第一个递归程序
//分治思想,用递归实现
//递归,求的一个数组中的最大和最小元素 递归的结构就是 在函数里面 刚开始是结束条件 然后写如果不满足条件的话 怎样递推
//有多个返回值的时候,把要返回的作为参数 写到 函数名字中
#include<iostream>
using namespace std;
int arr[9]={22,13,-5,-8,15,60,17,31,47};
void MAXMIN(int low,int high,int& fmax,int& fmin) //注意 这里是引用 地址传递
{
 if(low == high)
 {
  fmax=arr[low];
  fmin=arr[low];
 // cout<<fmax<<" "<<fmin<<endl;
 }
    else if(low == high -1)//一直给分到,最小的规模,可以一次比较之后,就出结果(分治的思想)
 {
  if(arr[low]<arr[high])
  {
   fmax= arr[high];
   fmin= arr[low];
  }
  else
  {
   fmax=arr[low];
   fmin=arr[high];
  }
 }
 else
 {
  int mid=(low+high)/2;
  int amax,amin,bmax,bmin;
  MAXMIN(low,mid,amax,amin);
  MAXMIN(mid+1,high,bmax,bmin);
  fmax=(amax>bmax ? amax:bmax);
  fmin=(amin<bmin?amin:bmin );

  
 }
 return ;
}


int main()
{
 int max=0,min=0;
 MAXMIN(0,8,max,min);  //如果不是引用的话 那么 max和min传走了之后,不会再回来
 cout<<max<<"  "<<min<<endl;
 return 0;

}

posted on 2011-04-22 11:05  qingcheng奕  阅读(855)  评论(0编辑  收藏  举报