https://www.zhihu.com/question/28062458

http://blog.csdn.net/hikean/article/details/9749391

对于Fibonacci数列,1,1,2,3,5,8,13,21...

   F(0) = 1, F(1) = 1, F(i) = F(i-1) + F(i-2) 求解第n项。
1、递归
long fib(int n)
{
if (n == || n == )
{
return ;
}
return fib(n-) + fib(n-);
}
    这是最好写,也是效率最低的方法,时间复杂度是指数级别的。
2、遍历
long fib(int n)
{
if (n == || n == )
{
return ;
}
vector <long> fibs(, );
for (int i = ; i <= n; ++i)
{
fibs.push_back(fibs[i-] + fibs[i-]);
}
return fibs[n];
}
    这个方法也是很容易想到的,时间复杂度是 O(n), 空间复杂度也是 O(n)。
3、遍历优化版
    fibs[n]只和前两个元素相关,因此任意时刻我们只要有前两项就可以了。这样空间复杂度可以做到 O(1),我们用个循环数组就可以了。
long fib(int n)
{
if (n == || n == )
{
return ;
} int fib[];
fib[] = fib[] = ;
int idx = ;
for (int i = ; i <= n; ++i)
{
idx = (idx + ) % ;
fib[idx] = fib[(idx + )%] + fib[(idx + )%];
}
return fib[idx];
}
4、矩阵相乘
    把一维问题拉到二维。

所以,

    现在问题是如何快速计算一个矩阵的n次方。这里可以利用A^n = A^(n/2)*A^(n/2) * (n % 2 == 1 ? A : I)进行分治。
matrix power(matrix A, int n)
{
matrix ans = I;
while(n > )
{
if (n % == )
{
ans *= A;
}
A *= A;
n /= ;
}
return ans;
}

这个算法的时间复杂度是O(logN).

5、特征值分解

对于矩阵的 n 次方求解,可以通过矩阵的特征值分解来完成。过程如下:

6、差分方程求解
    如果了解差分方程,那么这个解析解就很容易得到了。

Math: Fibonacci的更多相关文章

  1. 从零开始学习Node.js例子四 多页面实现数学运算

    app-node.js ; var http = require('http'); var htutil = require('./htutil'); var server = http.create ...

  2. JUnit4单元测试入门教程

    本文按以下顺序讲解JUnit4的使用 下载jar包 单元测试初体验 自动生成测试类 执行顺序 @Test的属性 下载jar包## 下载地址 在github上,把以下两个jar包都下载下来.     下 ...

  3. 山东省第七届ACM省赛------Fibonacci

    Fibonacci Time Limit: 2000MS Memory limit: 131072K 题目描述 Fibonacci numbers are well-known as follow: ...

  4. Applying Eigenvalues to the Fibonacci Problem

    http://scottsievert.github.io/blog/2015/01/31/the-mysterious-eigenvalue/ The Fibonacci problem is a ...

  5. wikioi 1973 Fibonacci数列【输出第N项的值】

    /*===================================== 1978 Fibonacci数列 3 题目描述 Description 斐波纳契数列是这样的数列: f1 = 1 f2 ...

  6. Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数

    Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...

  7. 斐波那契(Fibonacci)数列的七种实现方法

    废话不多说,直接上代码 #include "stdio.h" #include "queue" #include "math.h" usin ...

  8. 蓝桥杯 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  9. 第2章 数字之魅——斐波那契(Fibonacci)数列

    斐波那契(Fibonacci)数列 问题描述 递归算法: package chapter2shuzizhimei.fibonacci; /** * Fibonacci数列递归求解 * @author ...

随机推荐

  1. Qt---QFtp上传、下载二进制文件

    #include "mainwindow.h" #include "ui_mainwindow.h" #include <QFtp> #includ ...

  2. LeetCode 1037. Valid Boomerang (有效的回旋镖)

    题目标签:Math 题目给了我们三个点,让我们判断这三个点是否在一条直线上. 利用斜率 k = (y1 - y0) / (x1 - x0) 来判断,如果 三个点 abc, ab 的斜率 = bc 的斜 ...

  3. java.sql.SQLException: ORA-12704: 字符集不匹配

    INFO:HibernateSimpleDao----queryForListWithSql:SELECT site_id as id ,MAX(case attr_name when 'siteNa ...

  4. spring-boot-configuration-processor

    spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了 引入pom依赖 <de ...

  5. 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll已解决

    问题 : 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll 解决 1, 首先把C:\Windows\SysWOW64\的api-ms-win-crt- ...

  6. linux 平台安装JDK环境

    1.检查一下系统中的jdk版本 [root@localhost software]# java -version 2.检测jdk安装包 [root@localhost software]# rpm - ...

  7. 将excel表格或csv转换为Shapefile文件

    读取csv转为shp 构造读取csv函数 def read_csv(fp): ret = [] with open(fp, 'rb') as f: for line in f: ret.append( ...

  8. mysql 06章_分组查询和链接查询

    一.分组查询 在进行查询时,通常需要按某个或某些字段进行一些统计,因此就需要使用分组查询,但分组后通常需要与聚合函数使用,分组才有意义. 语法:SELECT <字段列表|*> FROM 表 ...

  9. JS对象 返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天。如果要返回相对应“星期”,通过数组完成

    返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应"星期",通过数组完成,代码如下: <script type="te ...

  10. CodeForces - 803F

    http://codeforces.com/problemset/problem/803/F #include <iostream> #include <cstdio> #in ...