用Ruby写的组合函数

求n个数字中取k个数字的组合方式递归的力量,简洁!
思考方式
1 - 7 里面取 3 个数字的结果 = 1 - 6 个数字里面取 3 个数字的结果 + (1 - 6 个数字里面取 2 个数字的每个结果和 7 组合)
def choose(n, k)return [[]] if k == 0return [] if n == 0return choose(n - 1, k) + choose(n - 1, k - 1).map {|ls| ls << n}end
p choose(7,3).sort
[[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 2, 6], [1, 2, 7], [1, 3, 4], [1, 3, 5], [1, 3, 6], [1, 3, 7], [1, 4, 5], [1, 4, 6], [1, 4, 7], [1, 5, 6], [1, 5, 7], [1, 6, 7], [2, 3, 4], [2, 3, 5], [2, 3, 6], [2, 3, 7], [2, 4, 5], [2, 4, 6], [2, 4, 7], [2, 5, 6], [2, 5, 7], [2, 6, 7], [3, 4, 5], [3, 4, 6], [3, 4, 7], [3, 5, 6], [3, 5, 7], [3, 6, 7], [4, 5, 6], [4, 5, 7], [4, 6, 7], [5, 6, 7]]
PS:Ruby 1.9 的数组Array自带combination方法可以实现相同的功能,没装1.9,不知道和效率会差多少。

posted @ 2010-10-15 23:22  smes.test  阅读(209)  评论(0)    收藏  举报