/**
 * A simple test of inefficient generation of Fibonacci numbers, intended
 * primarily to compare running times.
 */
public class Fib
{
  private static final int MAX = 42;
  private static final long UNINITIALIZED = -1;

  private static long[] cache;

  public static void main(String[] args)
  {
    System.out.println("Fibonacci number " + MAX + " is: " + newfib(MAX));
  } // main(String[])

  public static long fib(int n)
  {
    if (n < 2) return n;
    else return fib(n-1) + fib(n-2);
  } // fib(int)

  public static long newfib(int n)
  {
    // Initialize cache if necessary
    if ((cache == null) || (cache.length <= n)) {
      cache = new long[n+1];
      for (int i = 2; i <= n; i++)
        cache[i] = UNINITIALIZED;
      cache[0] = 0;
      cache[1] = 1;
    }
    if (UNINITIALIZED == cache[n])
      cache[n] = newfib(n-1) + newfib(n-2);
    return cache[n];
  } // newfib(int)
} // class Fib

