递归算法--->阶乘,Fibonacci数列,折半查找

来源:互联网 发布:中国消防网站的域名是 编辑:程序博客网 时间:2024/05/22 13:04
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;elsereturn 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;elsefor(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;}





1 0