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))