A method of designing algorithms which is similar to dynamic programming in that previously calculated answers are stored in memory

  • initialising memory for answers
  • work from top down
  • whenever a result is computed store it in memory
  • look up computed values (if you can) when needed
static HashMap<Integer, Long> fib = new HashMap<>();
public static long fibMEM(int n) {
	if(n <= 1) return 1;
	if(!fib.containsKey(n)) {
		fib.put(n, fibMEM(n-1) + fibMEM(n-2));
	}
	return fib.get(n);
}