我刚刚开始学习编程,并试图编写一个输出所有可能组合的函数。到目前为止,我已经能够找到尺寸 2 的所有可能组合,但我不确定如何使代码保持开放式以处理更大尺寸的组合。某种递归会有用吗?
我知道我可以使用内置的组合方法,但我只是想弄清楚如何从头开始编写它。任何建议将不胜感激。谢谢!
def two_combos(input)
list = []
for index1 in (0...input.length)
for index2 in (0...input.length)
if input[index1] != input[index2]
if list.include?([input[index2],input[index1]])==false
list << [input[index1],input[index2]]
end
end
end
end
return list
end
two_combos(["A","B","C"])
#outputs
=> [["A", "B"], ["A", "C"], ["B", "C"]]
#Missing
["A","B","C"]
这个实现就像二进制中的递归计数:
def combinations(items)
return [] unless items.any?
prefix = items[0]
suffixes = combinations(items[1..-1])
[[prefix]] + suffixes + suffixes.map {|item| [prefix] + item }
end
> combinations(%w(a b c))
=> [["a"], ["b"], ["c"], ["b", "c"], ["a", "b"], ["a", "c"], ["a", "b", "c"]]
在每个阶段,组合是以下内容的串联:
- 单独第一个元素
- 以下元素的组合(元素 1..n-1)
- 第一个元素与以下元素的组合相结合
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)