Fibonacci Search Visualizer
Watch how Fibonacci Search uses Fibonacci numbers to divide the array and efficiently locate the target element.
Time: O(log n)
Space: O(1)
Requirement: Sorted Array
Fibonacci Division
Fibonacci Numbers: fibM=0, fibM1=0, fibM2=0 | Offset: -1 | Comparisons: 0
0
2
1
3
2
4
3
10
4
40
5
43
6
56
7
67
8
78
9
89
10
99
Target: 10 | Step: 1 of 0
Current Step:
Click Start to begin Fibonacci Search visualization
Fibonacci Search
Time Complexity:O(log n)
Space Complexity:O(1)
Division:Fibonacci
Operations:Addition only
Color Legend
Currently Checking
Offset Position
Target Found
Search Space
Fibonacci Numbers
The algorithm uses Fibonacci numbers to divide the array:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
Each division follows the golden ratio (φ ≈ 1.618), providing optimal search performance.
How It Works
- 1Find smallest Fibonacci ≥ array length
 - 2Check element at offset + fibM2
 - 3Eliminate sections using Fibonacci
 - 4Continue until target found or exhausted
 
Python Implementation
def fibonacci_search(arr, target):
    n = len(arr)
    
    # Initialize Fibonacci numbers
    fib_m2 = 0  # (m-2)'th Fibonacci number
    fib_m1 = 1  # (m-1)'th Fibonacci number
    fib_m = fib_m2 + fib_m1  # m'th Fibonacci number
    
    # Find smallest Fibonacci number >= n
    while fib_m < n:
        fib_m2 = fib_m1
        fib_m1 = fib_m
        fib_m = fib_m2 + fib_m1
    
    offset = -1
    
    while fib_m > 1:
        # Calculate index to check
        i = min(offset + fib_m2, n - 1)
        
        if arr[i] < target:
            fib_m = fib_m1
            fib_m1 = fib_m2
            fib_m2 = fib_m - fib_m1
            offset = i
        elif arr[i] > target:
            fib_m = fib_m2
            fib_m1 = fib_m1 - fib_m2
            fib_m2 = fib_m - fib_m1
        else:
            return i
    
    # Check last element
    if fib_m1 and offset + 1 < n and arr[offset + 1] == target:
        return offset + 1
    
    return -1Real-world Applications
- • When multiplication/division is expensive
 - • Searching in sorted arrays efficiently
 - • Systems without floating-point arithmetic
 - • Optimal search with addition-only operations
 - • Embedded systems with limited CPU
 - • Mathematical sequence analysis