使用递归求解斐波那契额序列的话,会出现暴力求解导致的时间过长的问题,因此,为了优化数据查找的时间,使用记忆搜索的方法进行读取的优化。
具体的操作的实现是:把出现过的序列存储到缓存中,下一次的问题求解如果还调用这个子模块,那么直接从缓存中取出来就行,减少搜索查找的时间。
关键点:字典缓存;记忆查找;
#斐波那契-记忆搜索
# 初衷是解决暴力调用递归导致的搜索时间过长的问题
#
class Solution:
def fib(self,n):
if n <= 1:
return n
self.cache = {0:0,1:1} #用字典来存储fib序列的初始条件
return self.memomize(n)
def memomize(self,n):
if n in self.cache.keys(): # keys后面是需要加括号的,不加入括号的话,会出现什么影响呢?
return self.cache[n] # 字典型的存储的数据在索引的时候也是使用方括号的,自己在做的时候用成了圆括号,所以出现了问题
#
self.cache[n] = self.memomize(n-1) + self.memomize(n-2)
return self.memomize(n)
测试案例:
case= Solution()
print(case.fib(6))
8