# 未优化的递归函数
def fibonacci_unoptimized(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_unoptimized(n - 1) + fibonacci_unoptimized(n - 2)
# 优化后的递归函数(记忆化搜索)
memo = {}
def fibonacci_optimized(n):
if n in memo:
return memo[n]
if n == 0:
result = 0
elif n == 1:
result = 1
else:
result = fibonacci_optimized(n - 1) + fibonacci_optimized(n - 2)
memo[n] = result
return result
时间复杂度分析
- 未优化的递归函数:
- 未优化的斐波那契数列递归函数,每个
fibonacci_unoptimized(n)
会调用fibonacci_unoptimized(n - 1)
和fibonacci_unoptimized(n - 2)
,形成一个递归树。
- 时间复杂度近似于$O(2^n)$,因为递归树的节点数随着
n
的增加呈指数级增长,每个节点都需要一定的计算时间。
- 优化后的递归函数(记忆化搜索):
- 优化后的函数通过
memo
字典来存储已经计算过的结果。
- 每个
n
最多只计算一次,之后直接从字典中获取结果。所以时间复杂度为$O(n)$,因为最多需要计算n
个不同的斐波那契数。