求Fibonacci数列的三种思路和算法(C++实现)
来源:互联网 发布:淘宝客关闭了怎么还扣 编辑:程序博客网 时间:2024/05/16 09:10
版权声明:本文为 @iCurious
的原创文章,可以转载,但请务必注明作者和出处,谢谢合作!!!
摘要
本文主要介绍求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; }
运行结果
版权声明:本文为 @iCurious
的原创文章,可以转载,但请务必注明作者和出处,谢谢合作!!!
0 0
- 求Fibonacci数列的三种思路和算法(C++实现)
- 【算法】:求Fibonacci的多种思路和算法
- 【算法】求Fibonacci的多种思路和算法
- C语言:求Fibonacci数列的前n项和
- c编程:求Fibonacci数列的两种方式。
- 递归算法——求Fibonacci数列前n项(Java实现&C语言实现)
- 费波纳切(Fibonacci)数列的前N项和公式(PHP版)三种算法的比较
- 三种方式实现fibonacci数列
- Fibonacci数列算法的几种实现方式与比较
- Go语言实现Fibonacci数列的两个算法(使用递归和不使用递归)
- 求数列和的三种方法
- Fibonacci数列的实现
- Fibonacci数列的实现
- Fibonacci数列实现的几种方法(java实现)
- 求fibonacci数列第100项的值(Java实现)
- 递归实现求Fibonacci数列的第n项
- 请用递归算法,求Fibonacci数列。
- O(logn)求Fibonacci数列[算法]
- codeforces 725D Contest Balloons
- 总结
- 局域网给查看妹子图片和妹子账号密码
- 翻译《有关编程、重构及其他的终极问题?》——1. 别把编译器的事给做了
- 关于socket通信bind()返回值错误:10049
- 求Fibonacci数列的三种思路和算法(C++实现)
- UHD C/C++ 编程实例 USRP发送、接收数据
- ElasticSearch 快速入门
- 微信服务号提示"该公众号暂时无法提供服务请稍后再试"原因以及解决方法
- LeetCode153—Find Minimum in Rotated Sorted Array
- 关于QT图片处理(九宫格图片缩放问题)
- 双 11 技术攻略:企业云架构的正确姿势
- Javaweb微专业第四篇-----从程序控制结构谈起
- 2016-11-12