Fibonacci Number(s)
nhb-toolbox offers multiple utilities for working with the Fibonacci sequence:
- Generate full sequences
- Fetch a specific Fibonacci number
- Lazily iterate using a generator
- Supports aliases for convenient use
All inputs are coerced and validated using Number().
getFibonacciSeries
Generates the first limit Fibonacci numbers iteratively.
Function Signature
getFibonacciSeries(limit: Numeric): number[];
Parameters
limit— Number of Fibonacci numbers to generate.
Returns
An array of Fibonacci numbers from index 0 to limit - 1. If the input is invalid or non-positive, an empty array is returned.
Example
getFibonacciSeries(7); // [0, 1, 1, 2, 3, 5, 8]
Aliases
getFibonaccigetFibonacciNumbers
getFibonacciSeriesMemo
Generates the first limit Fibonacci numbers using recursion with memoization.
Function Signature
getFibonacciSeriesMemo(limit: Numeric): number[];
Parameters
limit— Number of Fibonacci numbers to generate.
Returns
An array of Fibonacci numbers from index 0 to limit - 1, using a memoized recursive function. Invalid input returns an empty array.
Example
getFibonacciSeriesMemo(7); // [0, 1, 1, 2, 3, 5, 8]
Aliases
getMemoizedFibonaccigetMemoizedFibonacciSeries
fibonacciGenerator
A lazy generator that yields Fibonacci numbers up to a given limit.
Function Signature
function* fibonacciGenerator(
limit: Numeric,
onYield?: (value: number, index: number) => void
): Generator<number, void, void>;
Parameters
limit— Number of Fibonacci values to yield.onYield(optional) — Callback called on each yield with(value, index).
Returns
- A generator that yields Fibonacci numbers one by one up to the specified
limit.
Example
for (const value of fibonacciGenerator(5)) {
console.log(value);
}
// Output: 0, 1, 1, 2, 3
With Callback
fibonacciGenerator(3, (val, idx) => {
console.log(`Index ${idx} => ${val}`);
});
Aliases
generateFibonacci
getNthFibonacci
Returns the Fibonacci number at the specified index.
Function Signature
getNthFibonacci(index: Numeric): number;
Parameters
index— Index (0-based) of the Fibonacci number to retrieve.
Returns
- The Fibonacci number at the given
index.
Example
getNthFibonacci(8); // 21
Summary of Aliases
| Function | Aliases |
|---|---|
getFibonacciSeries | getFibonacci, getFibonacciNumbers |
getFibonacciSeriesMemo | getMemoizedFibonacci, getMemoizedFibonacciSeries |
getNthFibonacci | None |
fibonacciGenerator | generateFibonacci |
Notes
- All functions gracefully handle invalid or non-numeric inputs.
- Internally, inputs are coerced using
Number(...), and validation is performed viaNumber.isFinite(...). - The
memoversion avoids recalculation viaMap, but not tail-call optimized. - The memoized variant is optimal for moderate
limitvalues but not designed for very largendue to recursion depth limits. - The generator is memory-efficient and supports optional side effects per iteration.
- Generator is ideal for performance-sensitive or infinite-like iteration use cases.
Limitations
fibonacciGenerator()does not return (short-circuits early) iflimit < 0or not finite.- Recursive memoized version is not tail-optimized; it may hit stack limits on very high input values.
getNthFibonacci()uses an iterative approach, so it performs efficiently for most practical input ranges.- Floating-point limits apply at high index values (
n > 70).
Summary
These Fibonacci utilities are flexible and efficient for different use cases — whether generating an entire sequence, computing a single term, or lazily consuming values via a generator.