js 斐波那契数列 reduce版本

302 阅读1分钟

代码实现


function fib (num) {
    if (typeof num !== 'number') {
        return [];
    }
    return [...new Array(num)].reduce(arr => {
    	// 默认是 [] [1] [1,1] [1,1,2] ...
        const clone = arr.slice(0);
        // undefined 1    1  2 
        const last1 = clone.pop();
        // undefined undefined 1 1 
        const last2 = clone.pop();
        
        let sum = (last1 + last2);
        // undefined + undefined === NaN
        // 1 + undefined === NaN
        if (Number.isNaN(sum)) {
            sum = 1;
        }
        arr.push(sum);
        return arr;
    }, [])
}
console.log('fib(5) :', fib(1));

运行结果:

fib(10) : [
  1,  1,  2,  3,  5,
  8, 13, 21, 34, 55
]