public class FibonacciTest { public static void main(String[] args) { System.out.println("Fibonacci 1: " + fibonacci(15)); System.out.println("Fibonacci 2: " + fibonacci2(15)); System.out.println("Fibonacci 3: " + fibonacci3(15)); } public static int fibonacci(int n) { if (n <= 1) return 1; return fibonacci(n-1) + fibonacci(n-2); } public static int fibonacci2(int n) { int first = 1; int second = 1; int third = 1; for (int i=2; i<=n; i++) { third = first + second; // compute new value first = second; // shift the others to the right second = third; } return third; } public static int fibonacci(int n, int prev, int prevPrev) { if (n <= 0) return prev + prevPrev; else return fibonacci(n-1, prev + prevPrev, prev); } public static int fibonacci3(int n) { if (n <= 1) return 1; return fibonacci(n-2, 1, 1); // calls above method } }