import java.util.*; class Fibonacci { // Add cache for optimization public static Map cache = new HashMap<>(); public static void main(String[] args) { // Print the fibonacci numbers from 0 to args[0] System.out.println("Reading limit from argument = " + args[0]); int limit = Integer.valueOf(args[0]); int[] values = new int[limit]; for (int i = 0; i < limit; ++i) { System.out.println("fib[" + i + "] = " + getNumber(i)); } } private static int getNumber(int a) { if (cache.containsKey(a)) { return cache.get(a); } if (a == 0 || a == 1) { cache.put(a, a); return a; } int value = getNumber(a-1) + getNumber(a-2); cache.put(a, value); return value; } }