Explain how you would optimize a slow-running recursive function using memoization or dynamic programming.