rekurencyjnie implementuje „minimalną liczbę monet” w pythonie

Ten problem jest taki sam, jak w pytaniututaj.

Biorąc pod uwagę listę monet, ich wartości (c1, c2, c3, ... cj, ...) oraz całkowitą sumę i. Znajdź minimalną liczbę monet, których suma to i (możemy użyć tyle monet, ile chcemy) lub zgłoś, że nie można wybrać monet w taki sposób, aby sumowały się do S.

Właśnie wczoraj wprowadzono mnie do programowania dynamicznego i próbowałem zrobić dla niego kod.

# Optimal substructure: C[i] = 1 + min_j(C[i-cj])
cdict = {}
def C(i, coins):

    if i <= 0:
        return 0

    if i in cdict:
        return cdict[i]
    else:
        answer = 1 + min([C(i - cj, coins) for cj in coins])
        cdict[i] = answer
        return answer

Tutaj C [i] jest optymalnym rozwiązaniem dla ilości pieniędzy „i”. A dostępne monety to {c1, c2, ..., cj, ...} dla programu, zwiększyłem limit rekursji, aby uniknąć błędu przekroczenia maksymalnej głębokości rekurencji. Ale ten program daje właściwą odpowiedź tylko niektórym, a gdy rozwiązanie nie jest możliwe, nie oznacza to.

Co jest nie tak z moim kodem i jak go naprawić?

questionAnswers(5)

yourAnswerToTheQuestion