#include<stdio.h>
#define MAXSIZE 50000
#define TRUE 1
#define FALSE 0
int Search(int *a,int low,int high,int b);
int main()
{
int n;
int i=0;
int a[MAXSIZE],b[MAXSIZE];
int m,t;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=0;i<m;i++){
scanf("%d",&b[i]);
}
for(i=0;i<m;i++){
t=Search(a,0,n-1,b[i]);
if(t==TRUE)printf("Yes\n");
else printf("No\n");
}
return 0;
}
int Search(int *a,int low,int high,int b)
{
int mid;
if(low<=high){
mid=(low+high)/2;
if(a[mid]==b)return TRUE;
if(a[mid]>b)return Search(a,low,mid-1,b);
if(a[mid]<b)return Search(a,mid+1,high,b);
}
else return FALSE;
}
#include<iostream>
#define MAXN 10000
#define true 1
#define false 0
using namespace std;
int n;//整数的个数
int a[MAXN];
int m;//查询的个数
int Merge(int *a,int k,int low,int high);
int main()
{
int i,k;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
cin>>m;
while(m>0){
cin>>k;
if(Merge(a,k,0,n-1))cout<<"Yes"<<endl;
else cout<<"No"<<endl;
m--;
}
return 0;
}
int Merge(int *a,int k,int low,int high)
{
int mid;
if(low<=high){
mid=(low+high)/2;
if(a[mid]==k)return true;
if(a[mid]<k){
low=mid+1;
return Merge(a,k,low,high);
}
if(a[mid]>k){
high=mid-1;
return Merge(a,k,low,high);
}
}
return false;
}
注意:这里的return 语句起到非常作用:接连递归。