我正在尋找一種算法來計算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