Skip to content

Visualizers

Fibonacci DP Visualizer

Animate recursion vs memoization vs tabulation for Fibonacci.

native Client-side

DP Table (dp[0] to dp[N])

Ready to compute.

Execution Log

Result F(N): -
Operations (Calls): 0
Current Action:

Idle

Legend:

Uncomputed
Active Lookups (N-1, N-2)
Calculated Value

Fibonacci via Dynamic Programming

The Fibonacci sequence is defined by $F(0) = 0, F(1) = 1$, and $F(n) = F(n-1) + F(n-2)$ for $n \ge 2$. Computing this recursively yields $O(2^n)$ exponential complexity due to overlapping subproblems.

Tabulation (Bottom-Up) vs Recursion

By caching or building results sequentially, we reduce complexity to linear $O(n)$:

  • DP Tabulation: Solves from base cases up. It builds an array of size $N+1$ and populates `dp[i] = dp[i-1] + dp[i-2]`, using previously solved states.
  • Standard Recursion: Top-down without cache. Computes `F(5)` by branching into `F(4)` and `F(3)`, recalculating states multiple times.

Implementation

// DP Tabulation (Bottom-Up)
function fibTabulation(n) {
  if (n <= 1) return n;
  const dp = Array(n + 1);
  dp[0] = 0;
  dp[1] = 1;
  for (let i = 2; i <= n; i++) {
    dp[i] = dp[i - 1] + dp[i - 2];
  }
  return dp[n];
}

// DP Memoization (Top-Down)
function fibMemo(n, memo = {}) {
  if (n in memo) return memo[n];
  if (n <= 1) return n;
  memo[n] = fibMemo(n - 1, memo) + fibMemo(n - 2, memo);
  return memo[n];
}