// 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];
}