斐波那契数列最优解
来源:互联网 发布:体脂称 知乎 编辑:程序博客网 时间:2024/06/06 01:55
波那契数列的通俗解法是利用递推公式进行递归求解,我们可以更优化的去解决它。
方法一:通项公式
斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+sqrt(5))/2,(1-sqrt(5))/2.所以f(n)=Ax1n+Bx2n,带入f(0)=0,f(1)=1得A=sqrt(5)/5,B=-sqrt(5)/5.则f(n)求出。
int FBi(int i){if (i<2)return i==0?0:1;return FBi(i-1)+FBi(i-2);}
方法二:分治策略
可以看出斐波那契数列有如下性质:
(fn fn-1)=(fn-1 fn-2)*A,可以得出A=(1 1;1 0)
递推可得:(fn fn-1)=(fn-1 fn-2)*A=(fn-2 fn-3)*A2=…=(f1 f0)*An-1
因此问题转化为n次幂的问题,因此幂运算有这样的性质ca+b=ca*cb,而n次幂的n可以拆成二进制的加法,所以只需要logn次遍历即可。代码如下:
Matrix MatrixPow(const Matrix& base,int exponent){ Matrix temp=base; Matrix result=Identity; for(;exponent;exponent>>=1) { if(exponent&0x1) result*=temp; temp*=temp; } return result;} int Fibonacci(int n){ Matrix A={1,1,1,0}; Matrix a=MatrixPow(A,n-1); return 1*a[0][0]+0*a[1][0];}
阅读全文
0 0
- 斐波那契数列最优解
- 斐波那契数列的最优算法(O(logN))
- 斐波那契数列的最优算法(golang代码)
- 斐波那契数列数列计算
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- js常用验证方法
- OAD基础知识详解(For CC2640)
- python简单实现拉格朗日差值计算
- CSS 实例 div布局
- 字符串翻转(Java)
- 斐波那契数列最优解
- 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍
- JavaScript之node.js-web框架Koa学习
- 【PB】PowerBuilder中的一些不太常用的方法
- 查看mint 18.1系统服务的启动状态的命令
- Laravel框架数据迁移和填充
- 异常处理
- 文本,文件,图片的上传与下载
- windows上使用eclipse远程连接hadoop进行程序开发没有权限访问问题