Münzwechsel auswendig lernen
Ich möchte meine Münztauschfunktion in eine gespeicherte Funktion umwandeln
Um dies zu tun, entschied ich mich, ein Wörterbuch zu verwenden, damit ein Schlüssel in meinem Diktat die Münze ist und der Wert eine Liste ist, die alle Münzen enthält, die die "Schlüssel" -Münze ändern können.
was ich getan habe ist:
def change(a,kinds=(50,20,10,5,1)):
if(a==0):
return 1
if(a<0 or len(kinds)==0):
return 0
return change(a-kinds[0],kinds)+change(a,kinds[1:])
def memoizeChange(f):
cache={}
def memo(a,kinds=(50,20,10,5,1)):
if len(cache)>0 and kinds in cache[a]:
return 1
else:
if(f(a,kinds)==1):
cache[a]=kinds // or maybe cache[a].append(..)
return cache[a]+memo(a-kinds[0],kinds)+memo(a,kinds[1:])
return memo
memC=memoizeChange(change)
kinds=(50,20,10,5,1)
print(memC(10,kinds))
Ich würde gerne ein paar Vorschläge bekommen, oder vielleicht gibt es einen anderen Weg, das zu tun.
Vielen Dank.
BEARBEITEN
Auswendig gelernt:
def change(a,kinds=(50,20,10,5,1)):
if(a==0):
return 1
if(a<0 or len(kinds)==0):
return 0
return change(a-kinds[0],kinds)+change(a,kinds[1:])
def memoizeChange(f):
cache={}
def memo(a,kinds=(50,20,10,5,1)):
if not (a,kinds) in cache:
cache[(a,kinds)]=f(a,kinds)
return cache[(a,kinds)]
return memo
change=memoizeChange(change)
print(change(10))