您的位置:首页 > 其它

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

2016-12-01 01:17 155 查看
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;
else
low=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);
else
HalfFind(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息