nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
66 lines (65 loc) • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFibonacciSeries = getFibonacciSeries;
exports.getFibonacciSeriesMemo = getFibonacciSeriesMemo;
exports.fibonacciGenerator = fibonacciGenerator;
exports.getNthFibonacci = getNthFibonacci;
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;
}
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));
}
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];
}
}
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;
}