### **************************** `fib(n)`。******,**********:
1. ********:**************。**,** `fib(5)` *,`fib(3)` * `fib(2)` ******,******。
2. *************:******** `n <= 2` ***,***** `n < 0` ***。******,***********。
3. **********:***** `n`,********* Python *********,** `RecursionError`。
### *******. *******(Memoization)**:*****************,******,****。
2. **********:*** `n < 0` ***,**************。
3. ************:******,**************。*****************,********。
### ********#### ***:*******```python
def fib(n, memo={}):
if n < 0:
raise ValueError("Input must be a non-negative integer")
if n <= 2:
return 1
if n in memo:
return memo[n]
memo[n] = fib(n-1, memo) + fib(n-2, memo)
return memo[n]
```
#### ***:*****```python
def fib(n):
if n < 0:
raise ValueError("Input must be a non-negative integer")
if n <= 2:
return 1
a, b = 1, 1
for _ in range(3, n+1):
a, b = b, a + b
return b
```
### *****. *********:
- ****** `memo` ****************。
- ********,*** `memo` ********,********,******。
- *** `n < 0` ***,** `ValueError`。
2. *******:
- ****** `a` * `b` *************。
- ***** `3` * `n` *********,*******,*****。
- ***** `n < 0` ***,** `ValueError`。
*************,***********。******************,******************。