Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources
Fibonacci Sequence

Fibonacci Sequence

Problem Statement

Generate the nth number in the Fibonacci sequence, where each number is the sum of the two preceding ones, starting with 0 and 1 (i.e., 0, 1, 1, 2, 3, 5, 8, ...). This easy-level problem is a recursion classic, defined as F(n) = F(n-1) + F(n-2), with base cases F(0) = 0 and F(1) = 1. It’s a beautiful way to see recursion in action, though it can get slow for large n—perfect for learning optimization later!

Example

Input: n = 0

Output: 0 (first number in sequence)

Input: n = 4

Output: 3 (sequence: 0, 1, 1, 2, 3)

Input: n = 6

Output: 8 (sequence: 0, 1, 1, 2, 3, 5, 8)

Code

Java
Python
JavaScript
public class Solution {
    public int fibonacci(int n) {
        if (n < 0) return -1; // Invalid input
        if (n == 0) return 0; // Base case 1
        if (n == 1) return 1; // Base case 2
        return fibonacci(n - 1) + fibonacci(n - 2); // Recursive step
    }
}
            
def fibonacci(n):
    if n < 0:
        return -1  # Invalid input
    if n == 0:
        return 0   # Base case 1
    if n == 1:
        return 1   # Base case 2
    return fibonacci(n - 1) + fibonacci(n - 2)  # Recursive step

# Example usage
print(fibonacci(0))  # 0
print(fibonacci(4))  # 3
print(fibonacci(6))  # 8
            
function fibonacci(n) {
    if (n < 0) return -1; // Invalid input
    if (n === 0) return 0; // Base case 1
    if (n === 1) return 1; // Base case 2
    return fibonacci(n - 1) + fibonacci(n - 2); // Recursive step
}

// Example usage
console.log(fibonacci(0)); // 0
console.log(fibonacci(4)); // 3
console.log(fibonacci(6)); // 8
            

Explanation

  • Base Cases: F(0) = 0 and F(1) = 1 define the sequence’s start.
  • Recursive Case: F(n) = F(n-1) + F(n-2), summing the previous two numbers.
  • Flow Example (n=4): fibonacci(4) → fibonacci(3) + fibonacci(2) → [fibonacci(2) + fibonacci(1)] + [fibonacci(1) + fibonacci(0)] → [1 + 1] + [1 + 0] → 2 + 1 → 3.
  • Tree Growth: Each call branches into two more, forming a binary tree of calls.
  • Caution: This naive recursion repeats calculations (e.g., fibonacci(2) is computed multiple times), making it inefficient for large n.

Note

Time complexity is O(2^n) due to exponential recursive calls—pretty slow for big n! Space complexity is O(n) for the call stack. Memoization or iteration can drop this to O(n) time—worth exploring!