【发布时间】:2017-06-16 13:12:04
【问题描述】:
首先,感谢您的帮助。我有这个递归代码,用于计算硬币列表和给定数量的变化方式。我需要编写一个递归生成器代码,以呈现每次找零的方式。例如,如果你得到 5 的数量和 [1,2,3] 个硬币的列表,那么这将是输出:
for e in change_gen(5,[1,2,3]):
print(e)
[1, 1, 1, 1, 1]
[1, 1, 1, 2]
[1, 2, 2]
[1, 1, 3]
[2, 3]
这是我尝试过的: 怎么了?
使用 binom 和 pascal 等算法的代码 {n \choose k}={n-1 \choose k-1}+{n-1 \choose k}
def change_gen(amount, coins):
if amount == 0:
yield []
elif not (amount < 0 or coins == []):
g = change_gen(amount, coins[:-1])
f = change_gen(amount - coins[:-1],coins)
while True:
yield Next(g)
yield coins[:-1].extend(next2(f))
【问题讨论】:
-
Next和next2来自哪里?另请注意,list.extend返回None... 并且 - 它有是递归的吗?这通常是一个非常适合动态/约束方法的问题。 -
next2 是错误的。是的,以递归方式编写它是一项任务。解决方案应如下所示: def change_gen(amount, coin): if amount == 0: yield elif not (amount
-
仍然没有解释
Next来自哪里 - 您可以在 edit 您的问题中包含此类信息和更正 -
接下来是在python中调用一个迭代
-
我认为 - 但它没有大写字母
N:) 当您提出问题时,请尝试使您正在使用的实际代码准确无误 - 在尝试调用Next的时刻将是NameError,即使您很可能是要使用next
标签: python python-3.x recursion generator