递归算法--->阶乘,Fibonacci数列,折半查找
2017-02-06 14:28
190 查看
1、 阶乘
int Factorial(int n)//阶乘 { int fin; if(n == 0||n == 1) return 1; else return n*Factorial(n-1) ;//----------------------递归核心:要求n!则需求n*(n-1)! }
2、Fibonacci数列
(1)递归实现:
int Fibrecurrence(int n)//Fibonacci数列,递归实现。
{
if(n == 1 || n==2)
return 1;
else
return Fibrecurrence(n-1)+Fibrecurrence(n-2);//-递归核心:当前项 = 前两项之和。
}(2)非递归实现:
int Fibunre(int n)//Fibonacci数列,非递归实现。
{
int fib1 = 1;
int fib2 = 1;
int cur;
int i;
if(n==1||n==2)
return 1;
else
for(i=3;i<=n;i++)
{
cur = fib1+fib2;
fib1 = fib2;
fib2 = cur;
}
return cur;
}
3、折半查找(1)非递归:
int Findun(int ar[],int n,int key)//折半查找法
{
int mid ;
int low = 0;
int hig = n-1;
while(low <= hig)//注意这里要用<=,如果少了=的话,当中间那个数为要找的数则无法返回正确的地址。
{
mid = (low+hig)/2;
if(ar[mid]==key)
return mid;
else if(ar[mid]>key)
hig = mid-1;
else if(ar[mid]<key)
low = mid+1;
}
return -1;
}(2)递归:
int Findrecurrence(int ar[],int key,int low,int hig) { int mid = (low+hig)/2; while(low<=hig) { if(ar[mid] == key) return mid; else if(ar[mid]<key) return Findrecurrence(ar,key,mid+1,hig); //注意这里要写成这样。如果像非递归那样写没有加return的话就返不回来了。就会一直进入死循环呐。 else if(ar[mid]>key) return Findrecurrence(ar,key,low,mid-1); } return -1; }测试主函数:
int main()
{
int ar[] = {1,23,45,67,90,123,345,678,900,1000};
int n ;
int fin;
int key;
cout<<"测试阶乘,请输入n!的n值:>";
cin>>n;
fin = Factorial(n);
cout<<fin<<endl;
cout<<"测试Fibonacci数列,请输入n值:>";
cin>>n;
fin = Fibrecurrence(n);
fin = Fibunre(n);
cout<<fin<<endl;
cout<<"测试折半查找,请输入要找的值:>";
cin>>key;
cout<<Findun(ar,10,key)<<endl;
cout<<Findrecurrence(ar,key,0,10)<<endl;
}
相关文章推荐
- 递归算法 sum(n)=1-1/2+1/3-1/4......(其中n>0)
- Fibonacci数列-递归算法
- 用递归算法实现n的阶乘
- 递归算法 阶乘 JAVA描述
- 递归算法详细分析-> C
- 错误的程序之阶乘之和测试程序的快慢程度(加一个计时器)<time.h>和clock()函数
- 递归算法实现阶乘的计算
- 一道经典的关于Fibonacci数列的面试题(问题)的新想法 -> N阶楼梯问题
- 大数阶乘 n! (当n>100)
- Fibonacci数列的递归算法
- 递归算法:阶乘
- 用递归算法实现n的阶乘
- C#计算阶乘的递归算法
- java算法:折半查找(递归算法和非递归算法)
- 递归算法求N的阶乘
- 递归算法——求Fibonacci数列前n项(Java实现&C语言实现)
- 递归算法示例——计算N的阶乘
- 递归算法详细分析-> C
- <数据结构与算法>二分查找(折半查找)
- 递归算法详细分析-> C