

package demo;

/**

Source code sent to scriptol by:
Christian Clausen
Computer scientist - Aarhus University - Denmark
*/

import java.util.Date;

public class Main
{
  private static long[] fib;
  public static void main(String[] args)
  {
      Long t1;
      int maxi = Integer.parseInt(args[0]);

      // recursive
      t1 = new Date().getTime();
      System.out.println("Recursive:");
      System.out.println(rec(maxi));
      System.out.println(new Date().getTime() - t1);

      // iterative
      System.out.println("Iterative:");
      t1 = new Date().getTime();
      System.out.println(ite(maxi));
      System.out.println(new Date().getTime() - t1);
  }

  private static long rec(int n){
      if(fib==null){
          fib = new long[n+1];
          for(int i = 0; i< n+1; i++)
              fib[i] = -1;
      }

      if(fib[n]==-1)
          if(n < 2)
              fib[n] = n;
          else
              fib[n] = rec(n-1) + rec(n-2);
      return fib[n];

  }

  private static long ite(int n){
      long[] ita = new long[n+1];
      ita[0] = 0;
      ita[1] = 1;
      for(int i = 2; i < n+1; i++){
          ita[i] = ita[i-1] + ita[i-2];
      }
      return ita[n];
  }


}



