斐波那契实现三种方法

2014-11-24 02:34:47 · 作者: · 浏览: 1
 
// sf8.cpp : 定义控制台应用程序的入口点。  
//http://blog.csdn.net/sunboyiris  
  
#include "stdafx.h"  
  
#include   
#include   
#include   
#include     
using namespace std;  
long fun(int n)  
{  
    if((n==1)|(n==2))  
    return 1;  
    else  
    return(fun(n-1)+fun(n-2));  
    }  
long FibIter(int n)     
{     
    //用迭代的方式求解Fibonacci数列      
    int twoback=1,oneback=1,current;     
     
    int i;     
    if (n==1||n==2)     
        return 1;     
    else     
        for(i=3;i<=n;i++)     
        {     
            current=twoback+oneback;     
            twoback=oneback;     
            oneback=current;     
        }     
    return current;     
}     
     
double FibFormula(int n)       
{     
    //用公式求解      
    double p1,p2;   
    double t1,t2;  
    t1=sqrt(5.0);  
    t1=(1+t1)/2.0;  
    t2=sqrt(5.0);  
    t2=(1-t1)/2.0;  
    p1=(double)pow(t1,n);     
    p2=pow(t2,n);     
    return (p1 - p2) /sqrt((double)(5.0));     
}     
     
  
int main()  
{  
int N,MAXN=100;  
 long set,set1,set2;  
    srand(time(NULL));  
  
     
    clock_t ibegin, iend;  
      
    printf("--当前数据量为%d--By vicent(http://blog.csdn.net/sunboyiris)--\n", MAXN);  
      
    ibegin = clock();  
      
    iend = clock();  
    printf("%d毫秒\n", iend - ibegin);  
  
      
    printf("--当前数据量为%d--By vicent(http://blog.csdn.net/sunboyiris)--\n", MAXN);  
      
      
    ibegin = clock();  
      
    iend = clock();  
    printf("%d毫秒\n", iend - ibegin);  
  
       
    printf("--当前数据量为%d--By vicent(http://blog.csdn.net/sunboyiris)--\n", MAXN);  
      
      
    ibegin = clock();  
    for(int i=2;i<1000;i++)  
      {  set=fun(i); }  
    iend = clock();  
    printf("%d毫秒\n", iend - ibegin);  
  
    printf("--当前数据量为%d--By vicent(http://blog.csdn.net/sunboyiris)--\n", MAXN);  
      
    ibegin = clock();  
    for(int i=2;i<1000;i++)  
      {  set1=FibIter(i); }  
    iend = clock();  
    printf("%d毫秒\n", iend - ibegin);  
    printf("--当前数据量为%d--By vicent(http://blog.csdn.net/sunboyiris)--\n", MAXN);  
      
    ibegin = clock();  
    for(int i=2;i<1000;i++)  
      {   set2=FibFormula(i);}  
    iend = clock();  
    printf("%d毫秒\n", iend - ibegin);  
 //set=fun(N);  
 //set1=FibIter(N);  
 //set2=FibFormula(N);  
 //cout<