Computing fib(n) by naive recursion re-solves the same subproblems again and again, so the number of calls grows exponentially. Memoization (dynamic programming) solves each distinct subproblem fib(0..n) exactly once, so the work is linear. Drag n and watch the naive call count tower over the memoized count. The vertical axis is a log scale, so a straight rising line is exponential growth and the gentle lower curve is linear.
Both compute the same answer. The only difference is that memoization remembers each subproblem's result, so fib(k) is never recomputed. That is the whole idea of dynamic programming: overlapping subproblems solved once. This is a fixed demonstration concept (NOVA's interactive-visual modality); the per-misconception, per-course generated version is the frontier work that follows.