斐波那契數列指的是這樣一個數列 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));
複製程式碼
該方法封裝了一個閉包,對值的儲存與操作類似第一種。