Récursive de transformation de l'algorithme

Donné une quantité de cible et une liste de pièces, mon code est censé trouver le moins de pièces de monnaie nécessaire pour atteindre le montant cible.

Exemples:

  • C(78, [1, 5, 10, 25, 50]) = 6

    • nous pouvons faire de 78 à partir de 3x25 + 3x1, pour 6 pièces de monnaie sont nécessaires
  • C(48, [1, 7, 24, 42]) = 2

    • 48 = 2x24, donc 2 pièces sont suffisamment
  • C(35, [1, 3, 16, 30, 50]) = 3

    • nous pouvons faire 35 de 2x16 + 1x3, donc 3 pièces suffisent

J'ai fait le code avec des boucles, mais comment puis-je faire en récursif?

def C(i, coins, cdict = None):
    if cdict == None:
        cdict = {}
    if i <= 0:
        cdict[i] = 0
        return cdict[i]
    elif i in cdict:
        return cdict[i]
    elif i in coins:
        cdict[i] = 1
        return cdict[i]
    else:
        min = 0
        for cj in coins:
            result = C(i - cj, coins)
            if result != 0:
                if min == 0 or (result + 1) < min:
                    min = 1 + result
        cdict[i] = min
        return cdict[i]
  • quand vous dites "paire de pièces de monnaie", entendez-vous à la "liste des pièces"?
  • Déjà, elle est récursive. Vous appelez C de l'intérieur de lui-même. Suis-je manqué quelque chose?
  • "La moins quantité de pièces de monnaie qui sont nécessaires"? Pour ce que? C'est vraiment mal expliqué.
  • Je pense que le plus petit nombre de pièces de la liste qui s'ajoutent à l'égal de ce nombre.
  • C'est sans doute la moins quantité de pièces de monnaie nécessaire d'ajouter jusqu'à i. C'est un assez bon exemple de problème de programmation dynamique.
InformationsquelleAutor user1681664 | 2012-09-20