斐波那契(Fibonacci)数列
来源:互联网 发布:传奇盛世心法1到8数据 编辑:程序博客网 时间:2024/04/29 22:53
编程之美
//递归,时间复杂度O(n),空间复杂度O(n)int Fibonacci(int n){ if(n==0||n==1)return n; return Fibonacci(n-1)+Fibonacci(n-2);}//迭代,时间复杂度O(n),空间复杂度O(1)int Fibonacci(int n){ if(n==0||n==1)return n; int f1=0,f2=1; while(n-->=2) { f2+=f1; f1=f2-f1; } return f2;}//通项公式int Fibonacci(int n){ double tmp=sqrt(double(5)); return int((pow((1+tmp)/2,n)-pow((1-tmp)/2,n))/tmp);}//分治,时间复杂度为O(logn)class Matrix{public: Matrix(int,int,int,int); Matrix operator*(Matrix); int m[2][2];};Matrix::Matrix(int a,int b,int c,int d){ m[0][0]=a; m[0][1]=b; m[1][0]=c; m[1][1]=d;}Matrix Matrix::operator*(Matrix rhs){ Matrix res(0,0,0,0); res.m[0][0]=m[0][0]*rhs.m[0][0]+m[0][1]*rhs.m[1][0]; res.m[0][1]=m[0][0]*rhs.m[0][1]+m[0][1]*rhs.m[1][1]; res.m[1][0]=m[1][0]*rhs.m[0][0]+m[1][1]*rhs.m[1][0]; res.m[1][1]=m[1][0]*rhs.m[0][1]+m[1][1]*rhs.m[1][1]; return res;}Matrix MatrixPow(Matrix m,int n){ Matrix res(1,0,0,1),tmp=m; for(;n;n>>=1) { if(n&1)res=res*tmp; tmp=tmp*tmp; } return res;}int Fibonacci(int n){ if(n==0||n==1)return n; return MatrixPow(Matrix(1,1,1,0),n-1).m[0][0];}
http://www.cnblogs.com/Knuth/archive/2009/09/04/1559951.html
定理1:当n>=2时,f(n)和f(n-1)互素。
证:
证毕。
定理2:当n>=1时,若i为奇数, f(i)*f(i)=f(i-1)*f(i+1)+1;若i为偶数,f(i)*f(i)=f(i-1)*f(i+1)-1。
证:数学归纳法
证毕。
定理3:f(n)=f(i)*f(n+1-i)+f(i-1)*f(n-i)
证:
证毕。
令i=n/2,
int Fibonacci(int n){ if(n==0)return 0; if(n==1||n==2)return 1; //当n>=3时,n>n/2+1 int x=Fibonacci(n/2); int y=Fibonacci(n/2+1); if(n&1)return x*x+y*y; return x*(2*y-x);}
0 0
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契(Fibonacci)数列
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契数列(Fibonacci)
- 斐波那契Fibonacci数列
- 斐波那契 (Fibonacci)数列
- Fibonacci(斐波那契)数列实现
- 斐波那契(Fibonacci)数列
- 斐波那契数列 Fibonacci sequence
- 斐波那契数列-Fibonacci Sequence
- Fibonacci(斐波那契数列)
- 斐波那契数列(fibonacci)
- Fibonacci斐波那契数列序列
- 斐波那契数列Fibonacci
- OpenCV4Android 选择图片并提取特征点
- 移动端app转码处理(根据不同设备的系统 安卓/ios)
- 黑马程序员_java_基础_数组和排序
- Python version 2.7 required, which was not found in the registry
- Android三种库的区别:pravite libraries、referenced libraries和dependency libraries
- 斐波那契(Fibonacci)数列
- FI 与MM SD的接口配置基本方法
- Less的点滴总结
- javascript与html代码相结合的方式
- 从Sqlite数据库里,通过mlate框架随机获取N条记录的过程
- 简易Java(03):Java类何时以及如何加载并初始化?
- 已知直线斜率是k, 且经过A(x1, y1), 求直线方程
- 黑马程序员_java_基础_面向对象01
- java组件的细节处理