用递归和非递归实现斐波拉切数列和二分查找

来源:互联网 发布:懂球帝软件 编辑:程序博客网 时间:2024/05/22 15:56
1.斐波那契数列递归实现#include<iostream>using namespace std;long long* MyFib(size_t n){long long* FibArray=new long long[n+1];FibArray[0]=0;FibArray[1]=1;for(size_t idx=2;idx<=n;++idx){FibArray[idx]=FibArray[idx-1]+FibArray[idx-2];}return FibArray;}int main(){long long* p=MyFib(10);cout<<p[5]<<endl;return 0;}2.斐波那契数列递归实现#include<iostream>using namespace std;size_t MyFib(size_t n){return n<2? n:MyFib(n-1)+MyFib(n-2);}int main(){size_t n=5;cout<<MyFib(n)<<endl;return 0;}3.二分查找(非递归)#include<iostream>using namespace std;int HalfFind(int* arr,size_t size,int data){int low=0;int high=size-1;while(low<=high){size_t  mid=(low+high)/2;if(arr[mid]==data)return mid;else if(arr[mid]>data)high=mid-1;elselow=mid+1;  }return -1;}int main(){int arr[]={1,3,5,7,9,11,15,16,19};size_t size=sizeof(arr)/sizeof(arr[0]);int n=11;cout<<HalfFind(arr,size,n)<<endl;return 0;}4.二分查找(递归)#include<iostream>using namespace std;size_t HalfFind(int* arr,size_t low,size_t high,int data){if(high<low)return -1;size_t mid=(low+high)/2;if(arr[mid]==data)return mid;else if(arr[mid]>data)HalfFind(arr,low, mid-1,data);elseHalfFind(arr, mid+1,high,data);return false;}int main(){int arr[]={1,3,5,7,9,11,15,16,19};size_t size=sizeof(arr)/sizeof(arr[0]);int n=86;cout<<HalfFind(arr,0,size,n)<<endl;return 0;}

0 0
原创粉丝点击