Makes any function cache its return values and arguments so it will never have to re-calculate a result twice given the same arguments.