typescript
// Fibonacci with memoization
type Memo = Map<number, bigint>;

function fibonacci(n: number, memo: Memo = new Map()): bigint {
  if (n <= 1) return BigInt(n);
  if (memo.has(n)) return memo.get(n)!;

  const result = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
  memo.set(n, result);
  return result;
}

// Generate first 50 fibonacci numbers
const results: Array<{ index: number; value: string }> = [];
for (let i = 0; i < 50; i++) {
  results.push({ index: i, value: fibonacci(i).toString() });
}

console.table(results);