如果我有3个苹果和2个桶,我可以按如下方式组织它们:
等。
我正在尝试制作某种程序,当苹果的数量可以是任意数量且桶的数量也可以是任何数字时,它将为我生成这样的组合。我的直觉告诉我将涉及一些递归但是,我甚至无法开始。有人能指出我正确的方向吗?
答案 0 :(得分:1)
是的,可以使用递归来解决这个问题。
提示您入门:如果您拥有M
个苹果和N
存储桶,则可以通过将m <= M
个苹果放入第一个存储桶找到解决方案的一个子集,然后使用(M - m)
apple和N - 1
存储桶查找子问题的所有解决方案。
答案 1 :(得分:1)
是的,您当然可以使用递归,它可以通过在堆中保存上下文来简化操作。但这并非绝对必要。
这里有一些(不是非常有效并且有很多东西丢失)如果您更喜欢这种方法,使用interation的伪代码可以让您在某个地方开始。下面的算法看起来有点反直觉,但如果你认为它通过你会看到它的工作原理。我已经尝试过它并且它完美无缺,所以让我知道如果你遇到困难我将发布一些工作代码。您可能还想尝试递归和迭代版本,看看哪一个对您更有意义。
put all apples in first bucket
while (true) {
add the solution to the list
firstNonEmptyBucket = find first bucket with any apples;
if (firstNonEmptyBucket is the last bucket)
break - you are finished
shift 1 apple from firstNonEmptyBucket to next bucket
if (firstNonEmptyBucket is not the first bucket)
shift all apples from firstNonEmptyBucket to previous bucket
}