概序
菲波那契数列,大致可以描叙为a(n) = a(n-1) + a(n-2) (a > 2)。类似于这样[1, 1, 2, 3, 5, 8, 13 ...],下面我们用js来实现一下:
1.递归
1 | var a = function(n) { |
以上我们可以比较清晰的看出代码的思路,但是这种方法有一个致命的缺点:效率太差!

执行到第44个的时候,已经不能接受了。需要5s多。那我们再来改进一下:
2.闭包+缓存
1 | var b = (function() { |
将每一步计算出来的值,保存到了缓存中。效率提升了许多:
3.直接计算出该数列的值得数组,然后再从数组中取值
1 | var c = function(n) { |
这样效率又进一步提高了不少:

4.直接使用数学表达式
从网上得出菲波那契数列是有数学表达式的:
1 | var d = function(n) { |
现在我们来看一下效果:

总结一下:以上方法都有利有弊,有人指出直接使用数学表达式会产生js计算精度问题,希望大家权衡考量,并且提出更好的建议。

