Below is an implementation of MemoIzation written in PythonLanguage. Is this technique possible or even applicable in OO languages like Java? -- AdewaleOshineye
-----
 #!/usr/bin/python

 """Take a function f and return a function fm that is the same as f except it uses cacheing. Uses Python 2.2
 Author: AdewaleOshineye 
 """
 import time

 def memoize(f):
	cache = {}
	def fm(*args):
		if args not in cache:
			cache[args] = f(*args)
		return cache[args]
	return fm

 def test(function, arguments, iterations):
	startTime = time.time()
	for x in range(iterations):
		result = function(*arguments)
	endTime = time.time()
	print "Result is ", result
	return endTime - startTime

 if __name__=='__main__':
	TEST_ITERATIONS = 1000000
	def factorial(n):
		if n > 1:
			return n * factorial(n-1)
		else:
			return 1

	def intersperse(arg1, arg2):
		return arg1.join(arg2)

	factorial2 = memoize(factorial)
	intersperse2 = memoize(intersperse)

	functions = [intersperse, intersperse2, factorial, factorial2]
	arguments = [("|", "HelloWorld"),("|", "HelloWorld"),(10,),(10,)]
	index = 0
	for f in functions:
		print "Testing %s took %.3f seconds" % (f.__name__, test(f, arguments[index], TEST_ITERATIONS))
		index += 1
----
Implementations in other languages are desired.