509. Fibonacci Number
🟩 Easy
The Fibonacci numbers, commonly denoted F(n)
form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0
and 1
. That is,
F(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.
Given n
, calculate F(n)
.
Example 1
Input: n = 2 Output: 1 Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.
Example 2
Input: n = 3 Output: 2 Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.
Example 3
Input: n = 4 Output: 3 Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3.
Constraints
0 <= n <= 30
Solution
My Solution (Recursive)
Optimal Solution (Iterative with Space Optimization)
Approach
This solution uses iterative approach with space optimization:
Key Insight:
Each Fibonacci number only depends on previous two
No need to store entire sequence
Can use variables instead of array
Implementation Strategy:
Keep track of only last two numbers
Update in each iteration
Use parallel assignment for clean swaps
Processing Rules:
Handle base cases (n ≤ 1) directly
Build sequence iteratively
Return last calculated number
Complexity Analysis
Time Complexity: O(n)
Single pass from 2 to n
Each number calculated exactly once
All operations are O(1)
Linear growth with input size
Space Complexity: O(1)
Only constant extra space used:
Two variables for previous numbers
One variable for current calculation
Loop counter
Why it works
Mathematical Properties:
F(n) = F(n-1) + F(n-2)
Only need previous two numbers
Sequence grows linearly
Optimization Details:
No recursion overhead
No array allocation
Minimal variable usage
Clean variable swapping
Key Improvements over Recursive:
No stack overflow risk
No duplicate calculations
Better space efficiency
Faster execution
Alternative Approaches (Not Implemented):
Matrix exponentiation: O(log n) time
Closed form (Binet's formula)
Dynamic programming with array
Tail recursion
Edge Cases Handled:
n = 0 returns 0
n = 1 returns 1
n = 2 first calculated case
Works up to n = 30 (constraint)
Last updated
Was this helpful?