code: def memoize(f):
      
      class memodict(dict):
  
          def __getitem__(self, *key):
              return dict.__getitem__(self, key)
  
          def __missing__(self, key):
              ret = self[key] = f(*key)
              return ret
  
      return memodict().__getitem__
docs: Memoization decorator for a function taking one or more arguments.