What is memoization, and how does it help?
Memoization stores previously computed results to avoid redundant calculations in recursive algorithms.
Memoization is an optimization technique used to improve the efficiency of recursive algorithms by storing the results of expensive function calls and reusing them when the same inputs occur again. This prevents redundant calculations and reduces the time complexity of problems that have overlapping subproblems, such as many dynamic programming problems. For example, in a Fibonacci sequence calculation, without memoization, you would calculate the same Fibonacci number multiple times. With memoization, you store each result once and reuse it, reducing the overall number of calculations from exponential to linear time.