在有序序列搜索特定数(附上一些关于递归的经验总结)

/*题目:
* 在一个已经排序的Int数组中,
* 查找某个number,如果存在这个number,
* 返回在数组的位置,反之返回-1*/

 



#include<stdio.h>
#define N 100
int search(int *a,int right,int lift,int n)
{
  int mid,s;
  mid=(right+lift)/2;
  if(lift-right==1) /*当搜索的区间锁定在两个数之间*/
  {
    if(a[lift]==n)
      return lift+1;
    else if(a[right]==n)
      return right+1;
    else
      return -1;
  }
  if(n>a[mid]) /*搜索的数字大于中间数,搜索右半区间*/
    s=search(a,mid,lift,n);
  if(n<a[mid]) /*搜索的数字小于中间数,搜索左半区间*/
    s=search(a,right,mid,n);
  if(n==a[mid]) /*搜素的数等于中间数,返回在数组的位置*/
    return mid+1;
    return s;

}
int main()
{
  int a[N]={0},i=0,n,m=0;
  char b;
  printf("please input the list:\n");
  do
  {
    scanf("%d",&a[i]);
    b=getchar(); /*吸收不可见字符(空格、回车),并创造输出结束的条件*/
    i++;
  }while(b!='\n');
  printf("please input the number of your search:\n");
  scanf("%d",&n);
  m=search(a,0,i-1,n); /*搜索并接受结果*/
  if(m!=(-1))
    printf("the place is %d\n",m);
  else
    printf("the list don't have this number!\n");
  return 0;
}


 

心得:

     在处理函数返回值的时候,遇到需要将调用的函数的值返回到主函数时,尤其注意使用递归的情况。

     当使用递归返回参数时,往往由于递归的层层展开,使得最低层的函数返回值在归的过程中容易丢失。
      对于这样的问题,往往有两种方法解决:
                   (1)、在每次递归的递的展开时都定义一个值来接受返回值,最终汇总到最上层,以便返回主函数;
                   (2)、定义一个全局变量,将最底层的函数返回值赋给该变量,在主函数直接引用。

 

posted @ 2016-07-17 21:11  长弓391  阅读(280)  评论(0编辑  收藏  举报