def fib_2_recursive_memoize(n, cache={}):
	"""
	Solution: Recursive solution that memorizes previously computed
	values by storing them in memory.
	Complexity:
		Time: O(n)
		Space: O(n)
	"""
	if n < 0:
		raise ValueError('input must be a positive whole number')

	if n in [0, 1]:
		return n

	if n in cache:
		return cache[n]

	val = fib_2_recursive_memoize(n - 2, cache) + fib_2_recursive_memoize(n - 1,
																		  cache)
	cache[n] = val
	return val