Fibonacci Sequence

Problem Statement

Given an integer n, return the nth number in the Fibonacci sequence. The sequence is defined as:

F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) for n > 1

Example: Input: n = 6, Output: 8

Approach 1: Recursion

Explanation: Direct recursive definition of Fibonacci.

Time Complexity: O(2n)

Space Complexity: O(n) recursion stack

function fib(n):
    if n == 0: return 0
    if n == 1: return 1
    return fib(n-1) + fib(n-2)
          

Approach 2: Memoization (Top-Down DP)

Explanation: Store results of subproblems to avoid recomputation.

Time Complexity: O(n)

Space Complexity: O(n)

memo = [-1]*(n+1)
function fib(n):
    if n == 0: return 0
    if n == 1: return 1
    if memo[n] != -1: return memo[n]
    memo[n] = fib(n-1) + fib(n-2)
    return memo[n]
          

Approach 3: Tabulation (Bottom-Up DP)

Explanation: Build DP array iteratively.

Time Complexity: O(n)

Space Complexity: O(n)

dp[0] = 0
dp[1] = 1
for i = 2 to n:
    dp[i] = dp[i-1] + dp[i-2]
return dp[n]
          

Approach 4: Space Optimized DP

Explanation: Only store last two values to save space.

Time Complexity: O(n)

Space Complexity: O(1)

a = 0, b = 1
for i = 2 to n:
    c = a + b
    a = b
    b = c
return b
          
Flowchart