Python 用Niave方法实现硬币兑换问题

Python 用Niave方法实现硬币兑换问题,python,recursion,greedy,coin-change,Python,Recursion,Greedy,Coin Change,我试图实现硬币兑换问题,它表明 换币问题被描述为给定一个值N,如果我们想的话 只要换N美分的零钱,我们就有无限量的零钱= {S1,S2,…,Sm}有价值的硬币,我们可以用多少种方法制作 改变硬币的顺序无关紧要。确定所有可能的方法 通过贪婪的方法改变N分。例如,对于N=4和S= {1,2,3},有四个解:{1,1,1,1},{1,1,2},{2,2}, {1, 3}. 所以输出应该是4。对于N=10和S={2,5,3,6},有 有五个解:{2,2,2,2},{2,2,3,3},{2,2,6},{2

我试图实现硬币兑换问题,它表明

换币问题被描述为给定一个值N,如果我们想的话 只要换N美分的零钱,我们就有无限量的零钱= {S1,S2,…,Sm}有价值的硬币,我们可以用多少种方法制作 改变硬币的顺序无关紧要。确定所有可能的方法 通过贪婪的方法改变N分。例如,对于N=4和S= {1,2,3},有四个解:{1,1,1,1},{1,1,2},{2,2}, {1, 3}. 所以输出应该是4。对于N=10和S={2,5,3,6},有 有五个解:{2,2,2,2},{2,2,3,3},{2,2,6},{2,3, 5} 和{5,5}。所以输出应该是5

注:这不是最初的换币问题,我们必须找到最佳解决方案(即最小硬币数量)

在我下面的python实现中,我使用了一个名为$check$的列表名。问题是程序在整个运行时都使用相同的$check$列表,所以我得到了错误的结果。它应该使用$check$列表,该列表是其函数调用的本地列表。有人能找到一条出路吗

# N
N = 10

# Set of Changes
s = [2, 3, 5, 6]

lst = []
check = [0, 0, 0, 0]

def Coin_Change_Count(C, check):       
    for k in range(len(s)):        
        i = len(s) - k - 1
        t = C - s[i]

        if (t >= 0):
            if (s[i] == 2):
                check[0] += 1
            elif (s[i] == 3):
                check[1] += 1
            elif (s[i] == 5):
                check[2] += 1
            elif (s[i] == 6):
                check[3] += 1

            if (t >= s[0]):
                Coin_Change_Count(t, check)

            if (t == 0):
                if (not (check in lst)):
                    lst.append(check)

Coin_Change_Count(N, check)
print(len(lst))

您有一个全局变量
check
和一个函数参数
check
。为清晰起见,请重命名其中一个。还要阅读Python文档以了解如何使用globals,查找规则可能有点令人惊讶。顺便说一句:由于您只将全局
检查传递给函数,因此全局变量和局部变量总是相同的。您可能需要复制列表。也就是说,你能给我一个你正在尝试实现的Niave方法的参考吗?@UlrichEckhardt实际上它是在我的算法实验室中给出的一个赋值,我使用的过程只是我的。你有一个全局变量
check
和一个函数参数
check
。为清晰起见,请重命名其中一个。还要阅读Python文档以了解如何使用globals,查找规则可能有点令人惊讶。顺便说一句:由于您只将全局
检查传递给函数,因此全局变量和局部变量总是相同的。您可能需要复制列表。也就是说,你能给我一个你正在尝试实现的Niave方法的参考吗?@UlrichEckhardt实际上它是在我的算法实验室中给出的一个任务,我正在使用的过程只是我的。