Rekursiv finden Sie alle Münzkombinationen, die eine bestimmte Menge produzieren

Meine Entschuldigungen im Voraus. Ich bin mir bewusst, dass diese Frage vorher mit Antworten gefragt wurde, die nicht die Ergebnisse produziert haben, die ich / brauchen möchte. Ich mache einen Versuch, eine Funktion zu schreiben, die in Python3 folgendes macht:

Ich brauche eine rekursive Funktion, die die ganze Anzahl von Möglichkeiten (Münzkombinationen) zurückgibt, die eine bestimmte Menge erzeugen. Diese Funktion kann nur zwei Argumente, Menge und Münzen enthalten. Ich habe eine schwierige Zeit gehabt, um meinen Geist um Rekursion zu wickeln, also Erklärungen würden auch sehr geschätzt werden. Vielen Dank.

Hier habe ich gerade:

COINS = dict( USA=[100, 50, 25, 10, 5, 1], AUSTRALIA=[200, 100, 50, 20, 10, 5], UK=[500, 200, 100, 50, 20, 10, 5, 2, 1] ) def change(amount, coins): """ >>> change(100, COINS['USA']) 293 """ if amount < 0: return 0 elif amount == 0: return 1 else: biggestcoin, *rest = coins[0], coins[1:] return change(amount-biggestcoin, coins) + change(amount, rest) 

2 Solutions collect form web for “Rekursiv finden Sie alle Münzkombinationen, die eine bestimmte Menge produzieren”

 biggestcoin, *rest = coins[0], coins[1:] 

Du willst hier rest , logisch, nicht *rest , weil du zwei Gegenstände auf jeder Seite hast. Mit *rest hier schafft eine zusätzliche Schicht von List Wrapping, die dann führt zu der Ausnahme, die Sie vermutlich sehen.

Sobald Sie das beheben, denken Sie an, was passiert, wenn Sie nicht die gewünschte Menge mit 1 von jeder Münze machen können. Der change(amount, rest) rekursive Aufruf wird schließlich auftreten, wenn der amount größer als Null ist und der rest leer ist. Du musst auch diesen Fall behandeln.

Die Idee hinter der Rekursion ist einfach:

Versuchen Sie und reduzieren Sie die Größe des Problems, ein kleiner Schritt zu einer Zeit.

Wenn du das machen kannst, bist du fast fertig! Beginnen Sie mit dem großen Problem und halten Sie einfach die Größe reduzieren, nach und nach, bis Sie am Ende mit einem sehr kleinen Problem. Sie können das lösen, aber Sie mögen.


Wie gilt das für das Änderungsproblem? Nun, wenn Sie gebeten werden, n zu machen, können Sie die Größe des Problems ein wenig reduzieren, indem Sie nur eine Münze verwenden. Und wenn du weiter gehst, bekommst du schließlich ein ausreichend kleines Problem zu lösen!

  • Python-Rekursions- und return-Anweisungen
  • Ist es möglich, die Rekursion aus dieser Funktion zu entfernen?
  • Rekursive Funktion, die keine zurückgibt?
  • Python Recursive Funktion fehlende Ergebnisse
  • Maximales Niveau der Rekursion in Python
  • Python rekursiver Funktionsfehler: "maximale Rekursionstiefe überschritten"
  • Python rekursiv anhängen Liste Funktion
  • Iteration in Rekursion umwandeln
  • Rekursionsfunktion funktioniert nicht richtig
  • Refactoring rekursive "Vorkommen von" Funktion
  • Integer auf Basis-x-System mit Rekursion in Python
  • Python ist die beste Programmiersprache der Welt.