找數字(遞歸,二分查找)
阿新 • • 發佈:2018-12-01
二分 code fin its 方便 查找 個數 縮小 遞歸
題目:在一從大到小排序的序列中用遞歸找一個數在不在這序列,在輸出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; }
找數字(遞歸,二分查找)