using System.Collections.Generic;
static Dictionary<int, BigInteger> cache = new Dictionary<int, BigInteger>();
public static void Main()
cache = new Dictionary<int, BigInteger>();
Console.WriteLine("Fibonacci");
Console.WriteLine("fib({0}) -> {1}", i, fib2(i));
Console.WriteLine("Fibonacci counter: {0}", counter);
public static long fib(int n)
return checked(fib(n-1) + fib(n-2));
public static BigInteger fib2(int n)
if(!cache.ContainsKey(n-1)) { cache.Add(n-1, fib2(n-1)); }
if(!cache.ContainsKey(n-2)) { cache.Add(n-2, fib2(n-2)); }
return checked(cache[n-1] + cache[n-2]);