(8)斐波那契实现三种方法
来源:互联网 发布:ubuntu自带拼音输入法 编辑:程序博客网 时间:2024/05/01 10:08
// sf8.cpp : 定义控制台应用程序的入口点。//http://blog.csdn.net/sunboyiris#include "stdafx.h"#include <cstdlib>#include <iostream>#include <time.h>#include <math.h> 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<<set<<endl; //cout<<set1<<endl; //cout<<set2<<endl; system("PAUSE"); return EXIT_SUCCESS;}