def fib(n): if n==0 or n==1: return 1 else: return fib(n-1)+(n-2) print(fib(12))使用动态规划或循环的方式来优化这个函数。
时间: 2024-11-15 15:31:29 浏览: 24
当前的 Fibonacci 函数使用了递归的方式计算序列,虽然简洁,但效率较低,因为它会重复计算许多已知的值。我们可以使用动态规划(Dynamic Programming)或循环(Iterative)的方法来优化这个过程,避免重复计算。
**使用循环优化:**
```python
def fib(n):
if n <= 0:
return "Input should be a positive integer."
elif n == 1 or n == 2: # 初始化基本情况
return 1
else:
a, b = 1, 1 # 初始化前两个数
for _ in range(2, n):
a, b = b, a + b # 每次迭代更新a和b
return b
print(fib(12))
```
在这个优化后的版本中,我们用两个变量 `a` 和 `b` 分别存储当前项和下一项的值,然后逐步更新它们,直到达到第 `n` 项。
**使用动态规划优化:**
```python
def fib(n):
if n <= 0:
return "Input should be a positive integer."
fib_sequence = [0, 1] + [0] * (n - 1) # 创建一个列表存储斐波那契序列
for i in range(2, n+1):
fib_sequence[i] = fib_sequence[i-1] + fib_sequence[i-2]
return fib_sequence[n]
print(fib(12))
```
在这个动态规划版本中,我们预先创建了一个列表 `fib_sequence` 来存储已经计算过的斐波那契数,这样就可以直接从列表中获取而不必每次都重新计算。
阅读全文