Python 为什么这个解决方案不是';换硬币算法不起作用吗?

Python 为什么这个解决方案不是';换硬币算法不起作用吗?,python,algorithm,coin-change,Python,Algorithm,Coin Change,编写一个程序,给定要更改的数量N和m个无限可用硬币的类型数量,以及m个硬币的列表,打印出您可以通过多少种不同的方式将硬币更改为标准硬币 我的直觉是,对于每一枚硬币,我都要试一下,然后在n-c上递归,其中c是硬币的值,如果我到了零,返回1,如果我到了零以下,返回0。我传入了以前使用过的硬币,并且只在小于或等于以前硬币的硬币上递归,以防止重复。我不明白为什么这种方法是不正确的,我如何才能纠正它 这是我的密码: def calc_change(n, coins): cache = {}

编写一个程序,给定要更改的数量N和m个无限可用硬币的类型数量,以及m个硬币的列表,打印出您可以通过多少种不同的方式将硬币更改为标准硬币

我的直觉是,对于每一枚硬币,我都要试一下,然后在n-c上递归,其中c是硬币的值,如果我到了零,返回1,如果我到了零以下,返回0。我传入了以前使用过的硬币,并且只在小于或等于以前硬币的硬币上递归,以防止重复。我不明白为什么这种方法是不正确的,我如何才能纠正它

这是我的密码:

def calc_change(n, coins):
    cache = {}
    c = max(coins)
    nums = calc_ways(n, coins, cache, c)
    return nums

def calc_ways(n, coins, cache, current_coin):
    if n < 0:
        return 0
    if n == 0:
        return 1
    if n not in cache:
        cache[n] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
    return cache[n]

answer = calc_change(n, coins) 
print answer
def calc_变化(n,硬币):
缓存={}
c=最大值(硬币)
nums=计算方式(n、硬币、缓存、c)
返回nums
def计算方式(n、硬币、缓存、当前硬币):
如果n<0:
返回0
如果n==0:
返回1
如果n不在缓存中:

Cache(n- C,硬币,缓存,C),如果C是你总计达“<代码> n>代码>的代码,则C是你的索引,如果你想加上<代码> n>代码>,那么问题是,同一代码< N>代码>的组合量可以根据你想考虑的一组硬币而改变。(例如<代码> n=10 和<代码>硬币[10],[5] <代码>有两种可能的组合,但是<代码> n=10 < /COD>和<代码>硬币=(5)< /C> >只有一个组合。您需要缓存来考虑<代码> CurrntEngEng/<代码>变量< < /P>
def calc_change(n, coins):
    cache = {}
    c = max(coins)
    nums = calc_ways(n, coins, cache, c)
    return nums

def calc_ways(n, coins, cache, current_coin):
    if n < 0:
        return 0
    if n == 0:
        return 1
    if (n,current_coin) not in cache:
        cache[(n,current_coin)] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
    return cache[(n,current_coin)]

answer = calc_change(n, coins) 
print answer
def calc_变化(n,硬币):
缓存={}
c=最大值(硬币)
nums=计算方式(n、硬币、缓存、c)
返回nums
def计算方式(n、硬币、缓存、当前硬币):
如果n<0:
返回0
如果n==0:
返回1
如果(n,当前硬币)不在缓存中:

缓存[(n,当前硬币)]=总和(计算方式(n-c,硬币,缓存,c)对于C中的硬币,如果C似乎起作用。为什么你认为它不是?我在HACKRANK上运行它,并得到结果是不正确的,认为你的问题是<代码> Cache > /Cord>存储有多少可能的组合用于<代码> N>代码>,但是它不考虑<代码> CurrnTyBoo币< /代码>。