我有第n个斐波纳契数的递归解决方案:
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
x=input('which fibonnaci do you want?')
print fib(x)
我需要更改它,以便它使用存储的内存缓存并从中获取内容以加快进程。我真的不知道该怎么做,谷歌没有帮助。
答案 0 :(得分:3)
用这个装饰你的功能:
http://docs.python.org/3/library/functools.html#functools.lru_cache
文档中的一个例子实际上就是斐波那契:
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
给出了:
>>> [fib(n) for n in range(16)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
>>> fib.cache_info()
CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
<强>更新强>
这仅适用于Python3.2 +
对于backport,请查看此页面:http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/
答案 1 :(得分:0)
这不是最优雅的解决方案,但可以帮助您了解其工作原理。
import memcache
def fib(n):
v = mc.get(str(n))
if not v is None:
print "Hit on cache: %s = %s" %(n, v)
return v
print "Miss on cache"
if n == 0:
return 0
elif n == 1:
return 1
else:
v = fib(n-1) + fib(n-2)
mc.set(str(n), v)
return v
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
x=input('which fibonnaci do you want?')
print fib(x)
如果您使用的是Ubuntu:sudo apt-get install python-memcache来运行此代码