热线电话:13121318867

登录
2019-01-30 阅读量: 765
如何使用Python中的装饰器进行记忆

递归是一种编程技术,其中函数重复调用自身直到满足终止条件。使用递归的一些例子是:斐波纳契序列的计算,阶乘等。但是它们的问题是在递归树中,有可能再次解决已经解决的子问题,这增加了开销。
记忆是一种记录中间结果的技术,因此可用于避免重复计算和加速程序。它可用于优化使用递归的程序。在Python中,可以在函数装饰器的帮助下完成memoization。
我们举一个计算数的阶乘的例子。下面的简单程序使用递归来解决问题:

# Simple recursive program to find factorial

def facto(num):

if num == 1:

return 1

else:

return num * facto(num-1)

print(facto(5))

可以使用装饰器通过memoization优化上述程序。

# Factorial program with memoization using

# decorators.

# A decorator function for function 'f' passed

# as parameter

def memoize_factorial(f):

memory = {}

# This inner function has access to memory

# and 'f'

def inner(num):

if num not in memory:

memory[num] = f(num)

return memory[num]

return inner

@memoize_factorial

def facto(num):

if num == 1:

return 1

else:

return num * facto(num-1)

print(facto(5))

0.0000
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子