In this lesson, you’ll go over the **Fibonacci** series and see how to solve it recursively. You’ll also learn how to use a **cache** to drastically improve runtime:

```
from functools import lru_cache
def fibonacci_recursive(n):
# base cases
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
@lru_cache(maxsize=None)
def fibonacci_recursive_optimized(n):
# base cases
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci_recursive_optimized(n - 1) + fibonacci_recursive_optimized(n - 2)
```

matteoarellanoon Feb. 23, 2022Does the cache work in sequential ascending order? Let’s say you evaluate first on n=500 on another type of function that is not fibonacci, does the same principle apply or only for specific type of function?