今天我们先从我们最熟的斐波那契数列数列开始。
0, 1, 1, 2, 3, 5, 8, 13, 21, 24, 55, ...从数列中可以发现从第三个数开始的值是前两个值的和。
递归解法
function fib(n){ if(n < 2){ return n; }else{ return fib(n - 1) + fib(n - 2); } } console.log(fib(10)); // 55动态规划解法
function fibDyn(n){ var temp = []; for(var i = 0; i <= n; i++){ temp[i] = 0 } if(n == 1 || n == 2){ return 1; }else{ temp[1] = 1; temp[2] = 2; for(var i = 3; i < n; i++){ temp[i] = temp[i - 1] + temp[i -2]; } return temp[i - 1]; } } fibDyn(10) // 55优化的迭代版。
function fibDyn(n){ var prev = 1; var middle = 1; var result = 1; for(var i = 2; i < n; i++){ result = prev + middle; prev = middle; middle = result; } return result; } fibDyn(10) // 55