Store the results of expensive function calls and return the cached result when the same input occurs again