【发布时间】:2015-05-01 18:39:42
【问题描述】:
我正在寻找一种非递归算法(最好在 C# 中),它将从一组正数中生成所有可能和的列表。
例如对于一组三个数字“1,2,3”,可能有以下七个和:
1
2
3
1+2=3
1+3=4
2+3=5
1+2+3=6
最大集合大小约为 50。我知道如何递归处理此问题,但过去在处理类似问题时受到调用堆栈的限制,所以这次想避免它。
【问题讨论】:
-
“过早的优化是万恶之源”
-
在最坏的情况下,有
2 ^ 50不同的总和。或者是否有任何额外的限制可以减少它们的数量?顺便说一句,在递归版本中,调用深度最多为50。我认为这不是问题。 -
@kraskevich 不只是在最坏的情况下。问题中的示例表明,产生相同总和的不同组合应该为每个组合单独计算,因此给定
N数字,您将总是得到2^N总和。 -
这是一个很好的观点。在这个特定的例子中实际上只有六个总和
标签: c# algorithm math recursion set