USER
下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:
```
def fib(n):
if n <= 2:
return n
return fib(n-1) + fib(n-2)
```
样例输出
### 问题分析
这段代码实现了一个递归的斐波那契数列计算函数 `fib(n)`。虽然代码简洁,但它存在以下几个问题:
1. **重复计算**:递归调用会导致大量的重复计算。例如,计算 `fib(5)` 时,`fib(3)` 和 `fib(2)` 会被多次计算,导致效率低下。
2. **边界情况处理不完善**:虽然代码中处理了 `n <= 2` 的情况,但没有处理 `n < 0` 的情况。对于负数输入,函数会返回不正确的结果。
3. **递归深度限制**:对于较大的 `n`,递归深度可能会超过 Python 的默认递归深度限制,导致 `RecursionError`。
### 解决方法
1. **使用记忆化(Memoization)**:通过缓存已经计算过的斐波那契数列值,避免重复计算,提高效DS官方提示词——代码改写
对代码进行修改,来实现纠错、注释、调优等。