// 斐波那契数列 1 1 2 3 5 8 13 21 34 55 ... // 规律:从第三个数开始,后一个数等于前两个数的和 // getFib(n) = getFib(n-1) + getFib(n-2) // 需求:求第100个斐波那契数 // 方法一 var arr = [] function getFib(n) { if (n === 1 || n === 2) { return 1 } if (arr[n]) { return arr[n] } else { arr[n] = getFib(n - 1) + getFib(n - 2); return arr[n] } } console.log(getFib(100)); // 方法二:利用递归 function outer(){ var arr = [] function getFib(n) { if (n === 1 || n === 2) { return 1 } if (arr[n]) { return arr[n] } else { arr[n] = getFib(n - 1) + getFib(n - 2); return arr[n] } } return getFib; } var result = outer(); console.log(result(100)); // 方法三:利用匿名函数自调用优化,减少使用全局变量===结合闭包进行性能优化(保护变量) var result = (function(){ var arr = [] function getFib(n) { if (n === 1 || n === 2) { return 1 } if (arr[n]) { return arr[n] } else { arr[n] = getFib(n - 1) + getFib(n - 2); return arr[n] } } return getFib; })(); console.log(result(100));