1. 程式人生 > >找數字(遞迴,二分查詢)

找數字(遞迴,二分查詢)

題目:在一從大到小排序的序列中用遞迴找一個數在不在這序列,在輸出yes,不在輸出no

這題用了二分查詢的遞迴實現

思路:

把陣列和變數都變成全域性變數方便遞迴函式修改

然後如果不可能就跳出迴圈

如果可能但現在沒找到就縮小範圍進入下一個遞迴過程

如果找到了就輸出

程式碼:

#include<bits/stdc++.h>
using namespace std;
int a[1000];
int n,key;

int finder(int l,int r)//左和右
{
    if(l>r)
    {
        cout<<"no
"<<endl; return 0; } int mid=(l+r)/2; if(a[mid]<key) { finder(l,mid-1); } else if(a[mid]>key) { finder(mid+1,r); } else { cout<<"yes"<<endl; return 0; } } int main() { std::ios::sync_with_stdio(
false); cin>>n>>key; for(int i=1;i<=n;i++) cin>>a[i]; finder(1,n); return 0; }