Вот полноценный класс , использующий концепцию памятка :
import java.util.HashMap;
import java.util.Map;
public class Fibonacci {
public static Fibonacci getInstance() {
return new Fibonacci();
}
public int fib(int n) {
HashMap<Integer, Integer> memoizedMap = new HashMap<>();
memoizedMap.put(0, 0);
memoizedMap.put(1, 1);
return fib(n, memoizedMap);
}
private int fib(int n, Map<Integer, Integer> map) {
if (map.containsKey(n))
return map.get(n);
int fibFromN = fib(n - 1, map) + fib(n - 2, map);
// MEMOIZE the computed value
map.put(n, fibFromN);
return fibFromN;
}
}
Обратите внимание, что используются
memoizedMap.put(0, 0);
memoizedMap.put(1, 1);
исключить необходимость следующей проверки
if (n == 0) return 0;
if (n == 1) return 1;
при каждом вызове рекурсивной функции.