Je suis à la recherche d'un algorithme pour calculer pow()
qui est récursif et utilise la mémoisation pour accélérer les calculs répétés.Algorithme pow() récursif en queue avec mémo?
La performance n'est pas un problème; C'est surtout un exercice intellectuel - j'ai passé un train à venir avec toutes les différentes implémentations pow()
que je pouvais, mais je n'ai pas réussi à en trouver un qui me plaisait avec ces deux propriétés.
Mon meilleur coup est la suivante:
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)
Il fonctionne, mais il ne memoize pas les résultats de tous les calculs - que ceux avec des exposants 1..exp/2
et exp
.
C'est la mémorisation, pas la mémorisation: http://en.wikipedia.org/wiki/Memoization – hobodave
Wow, c'est une utilisation effrayante des arguments par défaut de Python. Vous êtes en train d'émuler une variable globale là-bas. – Thomas