【问题标题】:Recursion-Python coins combination list [closed]递归-Python 硬币组合列表 [关闭]
【发布时间】:2013-11-14 17:40:53
【问题描述】:

我目前正在尝试编写一些代码,给定一个硬币值列表,它将返回所有可能的硬币组合,总和为某个值。这是程序应该如何运行的示例:

>>> find_changes(4,[1,2,3])
[[1, 1, 1, 1], [2, 1, 1], [1, 2, 1], [3, 1], [1, 1, 2], [2, 2], [1, 3]]

我得到了以下代码模板来填写:

def find_changes(n, coins):
    if n < 0:
        return []
    if n == 0:
         return [[]]
    all_changes = []

    for last_used_coin in coins:
        ### DELETE THE "pass" LINE AND WRITE YOUR CODE HERE
        pass

    return all_changes

我尝试在for 循环中使用以下代码:

all_changes.append[last_used_coin]
find_changes(n-last_used_coin,coins)

目前不工作。我做错了什么?

【问题讨论】:

  • 它应该做什么?怎么了?家庭作业需要更多的努力......
  • 是的,我知道,它应该返回所有可能组合的列表,给我们总和 n,我是 Python 递归的新手,所以.....
  • 您应该首先弄清楚您的基本情况是什么,然后弄清楚如何将问题分解为更小的子问题。如果这很难(因为这不是最简单的递归问题),请尝试先解决斐波那契递归之类的问题。
  • @user2928714 -- 欢迎来到 StackOverflow!你被否决的原因是,乍一看,你好像在问一个问题,但没有说明问题是什么,或者你想做什么。我尝试为您解决您帖子中的一些问题,但在未来,请尝试更清楚地提出您的问题,并了解 how to format 您在 StackOverflow 上的帖子。
  • 我在斐波那契数列中取得了成功,但在这个问题上没有,...

标签: python list recursion combinations


【解决方案1】:

您的答案很接近,但由于语法错误和逻辑错误的组合而失败。

请记住,append 是一个方法调用——您需要在括号周围添加一组括号,如下所示:

all_changes.append([last_used_coin])   
# Add a list of one element to the `all_changes` list

但是,您的代码仍然无法正常工作。让我们尝试挑选代码。

如果我们查看您的 for 循环,它会遍历您列表中所有可能的硬币。您采取了正确的下一步——您通过find_changes(n - last_used_coin, coins) 找到了n - last_used_coin 的所有可能的硬币组合。

现在,您需要做的就是通过调用find_changes 遍历所有可能的硬币组合,重新添加last_used_coin,并将所有内容附加到all_changes 列表中。

这是最终的工作代码:

def find_changes(n, coins):
    if n < 0:
        return []
    if n == 0:
         return [[]]
    all_changes = []

    for last_used_coin in coins:
        combos = find_changes(n - last_used_coin, coins)
        for combo in combos:
            combo.append(last_used_coin)
            all_changes.append(combo)

    return all_changes

print find_changes(4, [1,2,3])

【讨论】:

  • 非常感谢迈克尔,非常感谢!
  • 适应递归思维需要时间,尽管我完全理解如何将其应用于数学递归定义
  • 有问题,输出为:[[[[[[1], 1], 1], [[2], 1], 1, 1], [[[[1 ], 1], 1], [[2], 1], 1, 1], [[[1], 2], 1], [[3], 1]], [[[[[1], 1], 1], [[2], 1], 1, 1], [[[[1], 1], 1], [[2], 1], 1, 1], [[[1] , 2], 1], [[3], 1]], [[[[[1], 1], 1], [[2], 1], 1, 1], [[[[1], 1], 1], [[2], 1], 1, 1], [[[1], 2], 1], [[3], 1]], [[[[[1], 1] , 1], [[2], 1], 1, 1], [[[[1], 1], 1], [[2], 1], 1, 1], [[[1], 2 ], 1], [[3], 1]], [[[[1], 1], 2], [[2], 2]], [[[[1], 1], 2], [ [2], 2]], [[[1], 3]]]
  • @user2928714 -- 哎呀!现在应该修复(我在all_changes 上附加了combos 而不是combo
  • 再次感谢,有没有推荐的书,学习递归,递归思维(一般是怎么工作的,适应递归思维)——还有推荐的书——当然两本书都应该是通用的- 不是专门针对 python...谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
相关资源
最近更新 更多