原文地址:http://duras.wang/blog/2016/03/18/algorithms01/
斐波那契数列中每个数都是其两个直接前项的和,其生成规则如下所示:
Fn=⎧⎩⎨Fn−1+Fn−210如果n>1如果n=1如果n=0
.
指数算法
要求斐波那契数列的第n项值一种简单的方法就是使用递归
function fib(n)
if n=0: return 0;
if n=1: return 1;
return fib(n-1)+fib(n-2);
但是使用递归来计算第n项,它消耗的资源是指数级增长的。如下图所示,一个fib(n)会触发一连串的递归操作,而这些操作中有很多步骤是重复的。因此,这个算法虽然正确,但是效率太低。
多项式算法
递归的方法对资源的消耗太大,更合理的方法是使用循环来完成,随时保存中间结果。
function fib(n)
if n=0: return 0;
create an array f[0…n]
f[0]=0,f[1]=1
for i=2…n:
f[i]=f[i-1]+f[i-2]
return f[n]
矩阵算法
首先,对于数列的初始条件对应以下的矩阵运算