python - 如何消除该函数中的一个参数?

标签 python recursion

我想消除下面代码中的第三个参数,它只是一个空数组,我认为我应该能够在函数本身内将其创建为局部变量。

作为奖励,我还想将其构建为单个函数,尽管我认为当前的代码递归结构无法实现这一点。

我尝试创建一个空数组作为局部变量(请参阅注释掉的整数列表)

我还尝试创建一个计数变量,以随着找到的每个组合而递增(请参阅注释掉的计数变量)

def count_combinations(number, integers_available, integers):

    coin_set = []
    # integers = []
    # count = 0

    if sum(integers) == number:
        coin_set.append(integers)
        # count += 1

    elif sum(integers) > number:
        pass

    elif integers_available == []:
        pass

    else:
        for c in count_combinations(number, integers_available[:], integers + [integers_available[0]]):
            coin_set.append(c)
            # count += 1
        for c in count_combinations(number, integers_available[1:], integers):
            coin_set.append(c)
            # count += 1

    # return count += 1
    return coin_set

def count_total(number, integers_available, integers):
    return len(count_combinations(number, integers_available, integers))

# Testing the code
number = 15
integers_available = [1, 5, 10]
print(count_total(number, integers_available, []))

我希望得到相同的结果,但函数中的参数较少,因为其中一个参数将被切换为局部变量。

最佳答案

正如评论中所讨论的,动态编程方法在这里可能更Pythonic。

from collections import Counter

def ways(total, coins=(1,2,5,10,20,50,100)):
    counts = [[Counter()]] + [[] for _ in range(total)]
    for coin in coins:
        for i in range(coin, total + 1):
            counts[i] += [c + Counter({coin: 1}) for c in counts[i-coin]]
    return counts[total]

演示:

>>> ways(15, coins=(1,5,10))
[Counter({1: 15}),
 Counter({1: 10, 5: 1}),
 Counter({1: 5, 5: 2}),
 Counter({5: 3}),
 Counter({1: 5, 10: 1}),
 Counter({5: 1, 10: 1})]
>>> len(ways(15, coins=(1,5,10)))
6

关于python - 如何消除该函数中的一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429721/

相关文章:

python - 即使使用 mp.Manager.Queue() ,队列对象也只能通过继承在进程之间共享

python - 两个字典(键和值)的递归差异?

java - 在 Java 中使用递归的主要因素

algorithm - 我怎样才能展开重复: T(n)=2T((n+2)/3)

python - 如何解决解析带有西里尔符号的 html 文件的问题?

python - Python Int 对象的奇怪 id 结果

c# - 递归循环驱动器并替换非法字符

python - 从二叉树获取列表,TypeError

python - 使用 Python 测试随机点是否属于圆周

python - 在 Python 中通过 global 关键字从外部作用域访问变量