const Y = f => (x => f(x(x)))(x => f((...y) => x(x)(...y))) const sumOfPrev = arr => { let len = arr.length return arr[len - 1] + arr[len - 2] } const fib = Y( f => num => { if (num === 1) return [1] else if (num === 2) return [1, 1] else { const prev = f(num - 1) return prev.concat(sumOfPrev(prev)) } } ) console.log(fib(8))