斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89......
这个数列从第3项开始,每一项都等于前两项之和。
1.递归算法:
function fib(n) { if (n < 2) { return n; }else { return fib(n-1) + fib(n-2); } }
2.动态规划算法
function fib(n) { var val = []; for (var i = 0; i <= n; ++i) { val[i] = 0; } if (n == 1 || n == 2) { return 1; }else { val[1] = 1; val[2] = 2; for (var i = 3; i <= n; ++i) { val[i] = val[i-1] + val[i-2]; } return val[n-1]; } }
动态规划需要用到数组的原因是因为动态规划算法通常需要将中间结果保存起来。当计算fib(20)及更大的数字时,动态规划的解决方案比递归的解决方案更高效。
3.迭代法
function fib(n) { var last = 1; var nextLast = 1; var result = 1; for (var i = 2; i < n; ++i) { result = last + nextLast; nextLast = last; last = result; } return result; }