// Array of computed values, initially filled with -1 long[] memo; long fib_memo(int n) { if (n <= 2) { return 1; } if (memo[n] == -1) // Check if we have not already calculated the value { memo[n] = fib_memo(n-1) + fib_memo(n-2); } return memo[n]; }