/** * @function fibonacciCache * @description - this is a cached variant of fib number * @param {number} n - Real number (n > -1) * @param {Object} cache * @returns {number} */ export const fibonacciCache = (n, cache = null) => { if (cache) { const value = cache.get(n) if (value !== null) { return value } } if (n === 1 || n === 2) { return 1 } const result = fibonacciCache(n - 1, cache) + fibonacciCache(n - 2, cache) cache && cache.set(n, result) return result } /** * @title implementation of union function * @param {Set} sets * @return {new Set} */ export const union = (...sets) => { return new Set(sets.reduce((flatArray, set) => [...flatArray, ...set], [])) }