Fibonacci numbers start 0, 1, and each later term is the sum of the previous two.
The recursive definition, F(n) = F(n−1) + F(n−2), is beautiful but exponential: it recomputes the same values again and again. Keep just the last two values and walk forward instead:
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
This idea of remembering sub-results instead of recomputing them is the seed of dynamic programming.