【算法】:求Fibonacci的多种思路和算法
来源:互联网 发布:python多线程加锁 编辑:程序博客网 时间:2024/04/30 05:36
求Fibonacci的多种思路和算法
代码
能够直观地看出算法之间效率的区别
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; /**@brief:Fibonacci数,二分递归版 /* /* @param:n 求第n项Fibonacci数 /* @discription:虽然简洁明了,但是属于2^n的复杂度,这是无法忍受的 。 /* 并且重复递归。 /* @returns: __int64 */ __int64 fib(int n) { // if(n<=0)return n; // else if(n==1)return 1; // else return Fibonacci_A1(n-1)+Fibonacci_A1(n-2); return (n<2)?(__int64)n:fib(n-1)+fib(n-2); } /**@brief:Fibonacci数,线性递归版 /* /* @param:n 求第n项Fibonacci数 /* @discription: /* /* @returns: __int64 */ __int64 fib(int n,__int64 &prev) { if(n==0) { prev=1;return 0; } else { __int64 prevPrev; prev=fib(n-1,prevPrev); return prevPrev+prev; } } //用辅助变量记录前一项,返回数列的当前项 /**@brief:基于动态规划策略计算Fibonacci数 /* /* @param:n 求第n项 /* @discription:仅仅使用了两个中间变量,通过n次加法和减法计算fib(n) /* @returns: __int64 */ __int64 fibI(int n) { __int64 f=0,g=1;//初始化:fib(0)=0,fib(1)=1 while(n--) { g=g+f;f=g-f; //根据原始定义,通过n次加法和减法计算出fib(n) } return f; } int main() { int n=0; cin>>n; clock_t st1,st2,st3; clock_t en1,en2,en3; cout<<"\n-----Fibonacii数,动态规划版-----\n"; st1=clock(); for(int i=0;i<n;i++) cout<<"fib("<<i<<")="<<fibI(i)<<endl; en1=clock(); cout<<"总用时t1="<<(double)(en1-st1)/CLOCKS_PER_SEC<<"s\n"; cout<<"\n-----Fibonacci数,线性递归版-----\n"; st2=clock(); __int64 f; for(int i=0;i<n;i++) cout<<"fib("<<i<<")="<<fib(i,f)<<endl; en2=clock(); cout<<"总用时t2="<<(double)(en2-st2)/CLOCKS_PER_SEC<<"s\n"; cout<<"\n-----Fibonacci数,二分递归版-----\n"; st3=clock(); for(int i=0;i<n;i++) cout<<"fib("<<i<<")="<<fib(i)<<endl; en3=clock(); cout<<"总用时t3="<<(double)(en3-st3)/CLOCKS_PER_SEC<<"s\n"; return 0; }
0 0
- 【算法】:求Fibonacci的多种思路和算法
- 【算法】求Fibonacci的多种思路和算法
- 求Fibonacci数列的三种思路和算法(C++实现)
- 多种算法求最大公约数和最小公倍数
- 求算法思路!
- 算法题---求大神的思路
- 多种排序算法求中位数
- 算法与数据结构面试题(17)-求Fibonacci数的和
- 算法——Fibonacci数列的多种解法(递归算法)
- Fibonacci的算法
- 求重复数算法思路
- 请用递归算法,求Fibonacci数列。
- O(logn)求Fibonacci数列[算法]
- O(logn)求Fibonacci数列[算法]
- O(logn)求Fibonacci数列[算法]
- 图表轴刻度的思路,算法: 转载3【求算法:图表控件,如何确定坐标轴的范围和刻度?】
- fibonacci 算法
- Fibonacci算法
- NV_RESTORE的使用
- android测试手机不显示崩溃日志
- 最近找java实习面试被问到的东西总结(Java方向)
- C++中 引用&与取地址&的区别
- 1020: 算法提高 聪明的美食家
- 【算法】:求Fibonacci的多种思路和算法
- CakePHP命名约定
- Ubuntu16.04配置TensorFlow
- VoLTE的前世今生...说清楚VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事...
- 从NV中读取之前保存的网络信息
- ScrollView中嵌套ViewPager,ViewPager中使用FlowLayout
- 1118. Birds in Forest (25)
- 初来乍到,请多关照
- Poj 3661 Running(DP)