裴波那契数列
斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
求斐波那契数列第 n 项的值:
方法一:递归
function fibonacci(n) { if (!Number.isSafeInteger(n) || n < 0) { return; } if (n === 0 || n === 1) { return n; } else { return fibonacci(n - 1) + fibonacci(n - 2); } }
方法二:循环
function fibonacci(n) { if (!Number.isSafeInteger(n) || n < 0) { return; } if (n === 0) { return n; } var item1 = 1, item2 = 1, sum = 0; for (var i = 1; i < n; i++) { sum = item1 + item2; item1 = item2; item2 = sum; } return item1; }
用 Memoization 函数优化计算:
function memoization(func) { // Memoization 用于优化比较耗时的计算,通过将计算结果缓存到内存中,这样对于同样的输入值,下次只需要中内存中读取结果 var cache = {}; return function() { var key = arguments[0]; if (cache[key]) { return cache[key]; } else { var val = func.apply(this, arguments); cache[key] = val; return val; } }; } var fibonacci = memoization(function(n) { return (n === 0 || n === 1) ? n : fibonacci(n - 1) + fibonacci(n - 2); });