public class Fibonacci { // ------------------------------------------------------------------------------ // Fibonacci function, "the rabbit counting function" public static int fib (int n) { if (n <= 1) { return n; } else { return fib(n-1) + fib(n-2); } } public static int fibIter (int n) { if (n == 0) { return 0; } else { return fibTail(n,1,0,1); } } public static int fibTail (int n, int i, int FibIMinus1, int FibI) { if (n == i) { return FibI; } else { return fibTail(n, i+1, FibI, FibIMinus1 + FibI); } } public static void main(String [] args) { if (args.length != 2) { System.out.println("Usage: java Fib fib n"); System.exit(-1); } int n = Integer.parseInt(args[1]); if (args[0].equals("fib")) System.out.println("fib(" + n + ") => " + fib(n)); else if (args[0].equals("fibIter")) System.out.println("fibIter(" + n + ") => " + fibIter(n)); else System.out.println("Unrecogized fibonacci version: " + args[0]); } }