我正在寻找一种算法来计算pow()
这是尾递归,并使用memoization加快重复计算。带记忆的尾递归pow()算法?
表现不是问题;这主要是一个智力练习 - 我花了一个坐火车来实现我所能做的所有不同的pow()
实现,但无法想出一个让我满意的实现了这两个属性。
我最好的拍摄是以下几点:
def calc_tailrec_mem(base, exp, cache_line={}, acc=1, ctr=0):
if exp == 0:
return 1
elif exp == 1:
return acc * base
elif exp in cache_line:
val = acc * cache_line[exp]
cache_line[exp + ctr] = val
return val
else:
cache_line[ctr] = acc
return calc_tailrec_mem(base, exp-1, cache_line, acc * base, ctr + 1)
它的工作原理,但它并不memoize的所有计算的结果 - 只有那些具有指数1..exp/2
和exp
。
它是记忆而不是记忆:http://en.wikipedia.org/wiki/Memoization – hobodave 2010-04-04 17:30:04
哇,这是Python的默认参数的可怕使用。你实际上在那里模拟一个全局变量。 – Thomas 2010-04-04 17:38:25