Skip to content

Optimization with Memoization and CachingActivities & Teaching Strategies

Active learning builds intuition for optimization by letting students see inefficiency in real time. For memoization and caching, tracing recursive calls or simulating a cache makes the invisible problem of redundant computation visible. This hands-on work helps students connect abstract concepts to concrete performance gains.

12th GradeComputer Science4 activities20 min50 min

Learning Objectives

  1. 1Analyze the time complexity of recursive algorithms with and without memoization.
  2. 2Compare the performance of a naive recursive function to its memoized counterpart using empirical data.
  3. 3Design a Python function that implements memoization to solve a problem involving overlapping subproblems.
  4. 4Evaluate the trade-offs between memory usage and computational speed when applying caching techniques.

Want a complete lesson plan with these objectives? Generate a Mission

40 min·Pairs

Gallery Walk: Tracing the Call Tree

Post 6-8 stations around the room, each showing a Fibonacci or similar recursive function with a different input value. Students walk to each station and manually draw the recursive call tree, marking duplicate calls with a red marker. They then sketch a memoized version and count how many calls are saved at each station.

Prepare & details

Explain how remembering past results can speed up a program.

Facilitation Tip: During the Gallery Walk, circulate with a timer to keep groups moving every 3–4 minutes so they focus on tracing rather than lingering on one tree.

Setup: Wall space or tables arranged around room perimeter

Materials: Large paper/poster boards, Markers, Sticky notes for feedback

UnderstandApplyAnalyzeCreateRelationship SkillsSocial Awareness
25 min·Pairs

Think-Pair-Share: When Does Memoization Help?

Present students with 5 algorithm scenarios (string search, Fibonacci, matrix multiplication, sorting a random list, pathfinding in a grid). Students individually categorize each as 'benefits from memoization' or 'does not,' then pair up to compare their reasoning. Pairs share their most contested categorization with the class, driving discussion about overlapping subproblems.

Prepare & details

Identify problems where repeated calculations make an algorithm inefficient.

Facilitation Tip: In Think-Pair-Share, provide a timer for the pair phase to ensure all students contribute their reasoning before the class discussion.

Setup: Standard classroom seating; students turn to a neighbor

Materials: Discussion prompt (projected or printed), Optional: recording sheet for pairs

UnderstandApplyAnalyzeSelf-AwarenessRelationship Skills
50 min·Pairs

Collaborative Lab: Memoize It

Student pairs receive a working but slow recursive function, such as computing Fibonacci(35) or listing all subsets of a set. They first time the unoptimized version, then collaboratively add a dictionary-based memoization layer and compare runtimes. Each pair presents their performance improvement to the class with a before-and-after timing comparison.

Prepare & details

Design a simple function that uses memoization to improve its performance.

Facilitation Tip: In the Collaborative Lab, assign roles: one student codes, one tracks time, one records observations so everyone participates actively.

Setup: Groups at tables with access to research materials

Materials: Problem scenario document, KWL chart or inquiry framework, Resource library, Solution presentation template

AnalyzeEvaluateCreateDecision-MakingSelf-ManagementRelationship Skills
20 min·Whole Class

Simulation Game: Human Cache

One student acts as the 'computer,' another as the 'cache.' The teacher calls out function requests (e.g., 'fib(5), fib(3), fib(5) again'). The cache student must decide whether to look up the stored answer or pass it to the computer to compute fresh. This kinesthetic activity makes clear how a cache lookup differs from a full computation.

Prepare & details

Explain how remembering past results can speed up a program.

Facilitation Tip: During the Human Cache simulation, have students rotate roles every round so each learner experiences both the cache manager and the computation roles.

Setup: Flexible space for group stations

Materials: Role cards with goals/resources, Game currency or tokens, Round tracker

ApplyAnalyzeEvaluateCreateSocial AwarenessDecision-Making

Teaching This Topic

Start with a concrete example students already know, like the naive recursive Fibonacci, then immediately show the call tree to highlight repeated work. Use color-coding or underlining to mark overlapping calls. Avoid rushing to the code: let students articulate the inefficiency in their own words first. Research shows that students grasp dynamic programming better when they trace before they code, because the pattern of overlapping subproblems becomes memorable.

What to Expect

Students will recognize overlapping subproblems, modify recursive functions to use memoization, and explain when and why caching improves efficiency. They will also identify scenarios where caching adds overhead instead of benefit.

These activities are a starting point. A full mission is the experience.

  • Complete facilitation script with teacher dialogue
  • Printable student materials, ready for class
  • Differentiation strategies for every learner
Generate a Mission

Watch Out for These Misconceptions

Common MisconceptionDuring the Collaborative Lab: Memoize It, watch for students assuming memoization always speeds up every function they write.

What to Teach Instead

During the Collaborative Lab: Memoize It, have students test their memoized function with two sets of inputs: a sequence of Fibonacci numbers (structured, overlapping) and a set of random large numbers (minimal overlap). Ask them to measure and compare execution times to see when the cache helps or hurts.

Common MisconceptionDuring the Think-Pair-Share: When Does Memoization Help?, watch for students conflating memoization with dynamic programming.

What to Teach Instead

During the Think-Pair-Share: When Does Memoization Help?, provide side-by-side pseudocode for a memoized recursive Fibonacci and a bottom-up dynamic programming table. Ask pairs to compare structure, recursion vs. iteration, and how solutions are built. Use a Venn diagram template to organize similarities and differences.

Common MisconceptionDuring the Simulation: Human Cache, watch for students thinking caching only applies to recursive functions.

What to Teach Instead

During the Simulation: Human Cache, introduce a real-world scenario like a browser cache or CPU cache. Have students role-play a browser storing images and scripts on first visit and serving them from disk on return. Ask them to map their human cache actions to how a browser implements caching at scale.

Assessment Ideas

Quick Check

After the Gallery Walk: Tracing the Call Tree, present students with a recursive function and ask them to circle all inputs that cause redundant calculations. Then have them write one sentence explaining how a memoized version would avoid recomputing one of those inputs.

Discussion Prompt

During the Think-Pair-Share: When Does Memoization Help?, pose the scenario: 'A weather app updates temperature every second. When might caching slow this down instead of speeding it up?' Guide students to discuss cache invalidation, update frequency, and overhead.

Exit Ticket

After the Collaborative Lab: Memoize It, provide a short recursive function (e.g., factorial) without memoization. Ask students to write a memoized version in Python and state one specific benefit they observed during the lab, such as reduced runtime or fewer calls.

Extensions & Scaffolding

  • Challenge students to optimize a recursive function they wrote earlier in the year by adding memoization, then compare runtime before and after using timeit.
  • Scaffolding: Provide partially completed code with comments that guide where to add the cache dictionary and how to check it.
  • Deeper exploration: Ask students to design a cache with a fixed size (LRU cache) and test how it handles large or unordered input sequences.

Key Vocabulary

MemoizationAn optimization technique where the results of expensive function calls are stored (cached) and returned when the same inputs occur again, avoiding recomputation.
CachingA broader concept of storing data in a temporary location (cache) for faster access, often used in systems to speed up retrieval of frequently accessed information.
Overlapping SubproblemsA characteristic of problems where the same subproblems are encountered and solved multiple times during the computation of the overall problem.
Dynamic ProgrammingAn algorithmic technique that solves complex problems by breaking them down into simpler, overlapping subproblems and storing the solutions to these subproblems to avoid redundant work.

Ready to teach Optimization with Memoization and Caching?

Generate a full mission with everything you need

Generate a Mission