在有序序列搜索特定数(附上一些关于递归的经验总结)
/*题目:
* 在一个已经排序的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;
}
心得:
在处理函数返回值的时候,遇到需要将调用的函数的值返回到主函数时,尤其注意使用递归的情况。