递归是一种编程技术,其中函数重复调用自身直到满足终止条件。使用递归的一些例子是:斐波纳契序列的计算,阶乘等。但是它们的问题是在递归树中,有可能再次解决已经解决的子问题,这增加了开销。
记忆是一种记录中间结果的技术,因此可用于避免重复计算和加速程序。它可用于优化使用递归的程序。在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))








暂无数据