Python 递归组合表
我目前正在尝试编写一些代码,给定一个硬币值列表,将返回所有可能的硬币组合,并将其相加为某个值。以下是程序应如何运行的示例:Python 递归组合表,python,list,recursion,combinations,Python,List,Recursion,Combinations,我目前正在尝试编写一些代码,给定一个硬币值列表,将返回所有可能的硬币组合,并将其相加为某个值。以下是程序应如何运行的示例: >>> 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 []
>>> 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
它目前不工作。我做错了什么?您的答案很接近,但由于语法错误和逻辑错误的组合而失败 请记住,
append
是一个方法调用——您需要在括号周围添加一组括号,如下所示:
all_changes.append([last_used_coin])
# Add a list of one element to the `all_changes` list
但是,您的代码仍然不能正常工作。让我们试着把代码通读一遍
如果我们看一下你的循环,它正在循环你列表中每一个可能的硬币。您采取了正确的下一步——通过您的线路find\u changes(n-last\u used\u coins,coins)
,找到了n-last\u used\u coins
的所有可能的硬币组合
现在,您需要做的就是通过调用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])
def find_更改(n,硬币):
如果n<0:
返回[]
如果n==0:
返回[]]
所有更改=[]
对于最后一次使用的硬币:
组合=查找更改(n-最后使用的硬币,硬币)
对于组合中的组合:
追加(最后使用的硬币)
所有更改。追加(组合)
返回所有更改
打印查找更改(4、[1,2,3])
它应该做什么?怎么了?家庭作业需要更多的努力……是的,我知道,它应该返回一个所有可能组合的列表,给我们一个和n,我对Python上的递归不太熟悉,所以……你应该首先弄清楚基本情况是什么,然后弄清楚如何将问题分解成更小的子问题。如果这很难(因为这不是最简单的递归问题),请先尝试解决类似斐波那契递归的问题。@user2928714——欢迎使用StackOverflow!你被否决的原因是,乍一看,你好像在问一个问题,但没有说明问题是什么,或者你想做什么。我试着帮你解决你帖子中的一些问题,但在将来,试着更清楚地问你的问题,并学习你在StackOverflow上的帖子。我在斐波那契数列中取得了成功,但在这个问题上没有成功,…非常感谢你,迈克尔,我非常感谢!适应递归思维需要时间,尽管我完全理解如何将其应用于数学递归定义。这是一个问题,其结果是:[[1],[1],[1],[1],1,1],[1],1],[2],[1],[1],[1],[1],[2],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[2],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[2],[1][[1]、[1]、[1]、[1]、[1]、[1]、[1]、[2]、[1]、[2]、[1]、[1]、[1]、[1]、[2]、[1]、[1]、[1]、[1]、[2]、[1]、[1]、[2]、[1]、[3]、[1]、[1]、[1]、[1]、[2]、[1]、[2]、[1]、[1]、[1]、[2]、[2]、[2]、[1]、[1]、[1]、[1]、[2]、[2]、[1]、[2]、[2]、[1]、[2]、[2]、[2]、[2]、[2]、[4](我在所有更改
中添加了组合
而不是组合
)再次感谢您,是否有一本学习递归和递归思维的推荐书(它通常是如何工作的。适应递归思维)-还有推荐书吗?当然,这两本书都应该是一般性的,不是专门介绍python的…谢谢
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])