斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597...
斐波拉契数列的典型特征是下一项是由前两项组成的和,我们有很多方式可以实现。
- 定义一个数组记录每一个值,做值运算
- 定义两个基础值,用递归做运算
- 采用闭包记录下基础值
他们的实现重点都是记录值,我们也可以说,能够做值记录的方法都可以实现斐波拉契数列。
数组方法
var newItem = arr => {
return arr[arr.length - 1] + arr[arr.length - 2];
};
var allItem = itemNum => {
let arr = [1, 1];
for (let i = 0; i < itemNum - 2; i++) {
arr.push(newItem(arr));
}
return arr;
};
console.log(allItem(10));
该方法最为直观,对数组尾项进行操作。
递归运算
let result = [1, 1];
var arrHandle = itemNum => {
result.push(result[result.length - 1] + result[result.length - 2]);
if (result.length !== number) {
goback(itemNum);
}
};
arrHandle(10);
console.log(result);
该方法的result必须放在函数外部,并且函数不纯,改变了result,对后面的操作有影响。
闭包运算
let arrHandle = () => {
let result = [1, 1];
return itemNum => {
for (let i = 0; i < itemNum - 2; i++) {
let newItem = result[result.length - 1] + result[result.length - 2];
result.push(newItem);
}
return result;
};
};
let getAllItem = arrHandle();
console.log(getAllItem(10));
该方法封装了一个闭包,对值的保存与操作类似第一种。