UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

60 lines (59 loc) 1.46 kB
export function getFibonacciSeries(limit) { const cLimit = Number(limit); if (!Number.isFinite(cLimit) || cLimit <= 0) { return []; } if (cLimit === 1) return [0]; const series = [0, 1]; for (let i = 2; i < cLimit; i++) { series.push(series[i - 1] + series[i - 2]); } return series; } export function getFibonacciSeriesMemo(limit) { const cLimit = Number(limit); if (!Number.isFinite(cLimit) || cLimit <= 0) return []; if (cLimit === 1) return [0]; const memo = new Map([ [0, 0], [1, 1], ]); const fib = (n) => { if (memo.has(n)) { return memo.get(n); } const val = fib(n - 1) + fib(n - 2); memo.set(n, val); return val; }; return Array.from({ length: cLimit }, (_, i) => fib(i)); } export function* fibonacciGenerator(limit, onYield) { const cLimit = Number(limit); if (!Number.isFinite(cLimit) || cLimit < 0) return; let a = 0; let b = 1; for (let i = 0; i < cLimit; i++) { onYield?.(a, i); yield a; [a, b] = [b, a + b]; } } export function getNthFibonacci(index) { const n = Number(index); if (!Number.isFinite(n) || n < 0) return NaN; if (n === 0) return 0; if (n === 1) return 1; let a = 0, b = 1; for (let i = 2; i <= n; i++) { [a, b] = [b, a + b]; } return b; }