【问题标题】:Recursion to get the number of different combinations of n people and k groups递归得到n人和k组的不同组合的数量
【发布时间】:2010-11-07 00:13:07
【问题描述】:

我正在使用 Java 练习递归,但遇到了问题。我正在尝试制作一个我称之为“组”的方法,它需要一些人以及有多少个组,并返回人和组的不同组合的数量。此外,组中人员的顺序无关紧要,组的顺序也不重要。

我目前的代码是:

public long groups(int n, int k) {
    if(k==1) return 1;
    if(k==n) return 1;
    else return groups(n-1, k) + groups(n-1, k-1);
}

但是它返回错误的值。前两行是基本案例,如果有 1 组,那么只有一种方法可以将人们分开,这是有道理的。另一种是当人数与组数一样多时,在这种情况下,只有一种方法可以将他们分开,每个组一个人。最后一个语句是我认为我遇到问题的地方,我认为每次它进行递归调用时,都必须取出一个人(n 是人数,所以 n-1)并且那个人可以以太加入一个小组 (k) 或创建自己的小组 (k-1)。

我只是在搞清楚递归的工作原理时遇到了一点麻烦,需要一点帮助。

这些是我期望的值:

groups(2,1) = 1
groups(2,2) = 1
groups(3,2) = 3
groups(4,2) = 7
groups(4,3) = 6
groups(5,3) = 25

【问题讨论】:

  • 请您举例说明预期和收到的答案?
  • 缺少对n < k 的处理(错误或零),为了完整性,您应该检查输入值,即nk 必须大于零
  • @mattbasta: "The homework tag, like other so-called 'meta' tags, is now discouraged," 但是,Adam,请遵循链接的作业指南,包括说明特殊限制、到目前为止您尝试过的内容以及问题的具体部分让您感到困惑。

标签: java recursion combinations


【解决方案1】:

该部分的实现中缺少一些东西

...并且那个人可以加入一个组(k)...

我认为该人可以加入'k'组,所以代码必须是

    public long groups(int n, int k) {
        if(k==1) return 1;
        if(k==n) return 1;
        else return k * groups(n-1, k) + groups(n-1, k-1);
    }

(缺少乘以k

【讨论】:

  • 哦,我会给你一个投票,但显然我不能,直到我有 15 名声望。对不起! :(
  • 没问题,我喜欢解决作业的算法,感谢您接受答案(为此获得了一些声誉)
【解决方案2】:

有一种更简单(更快)的方法来计算组合——这就是binomial coefficient。虽然我可以理解您的老师可能希望您以这种方式编写递归函数以熟悉递归,但您可以使用此公式作为检查。

在您的情况下,您在此处报告了错误的预期值。你想要的是

groups(2,1) = 2
groups(2,2) = 1
groups(3,2) = 3
groups(4,2) = 6
groups(4,3) = 4
groups(5,3) = 10

如果上面的值是它应该返回的值,那么您发布的代码是正确的。

(如果不是,也许您可​​以通过更清楚地解释您正在解决的问题与binomial coefficient 的不同之处来更好地澄清问题。)

【讨论】:

  • 好吧,我的作业说“给定 n 个学生,返回你可以将他们分成 k 个组的多少种方式。”然后在我的问题中给出上述值。
  • 另外,当我运行上面的代码时,我得到:“groups(2,1): 1 groups(2,2): 1 groups(3,2): 2 groups(4,2) : 3 groups(4,3): 3 groups(5,4): 4 groups(5,3): 6" 这和你给的值不一样。
  • @Adam:好的,有一个小细节直到我发布后我才注意到:要获得我给出的值,基本情况 if(k==1) return 1; 必须更改为 if(k==0) return 1
猜你喜欢
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多