---
tags: data_structure_python
---
# Fibonacci Number <img src="https://img.shields.io/badge/-easy-brightgreen">
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: 2
Output: 1
Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.
```
**Example 2:**
```
Input: 3
Output: 2
Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.
```
**Example 3:**
```
Input: 4
Output: 3
Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3.
```
**Note:**
```0 ≤ N ≤ 30.```
# Solution
### Solution 1: Recursive + Memoization
```python=
class Solution:
def fib(self, N: int) -> int:
return self.__fib(N, cache = {})
def __fib(self, N, cache):
if N in [0, 1]:
return N
elif N in cache:
return cache[N]
else:
res = self.__fib(N-1, cache) + self.__fib(N-2, cache)
cache[N] = res
return res
```