【发布时间】: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的处理(错误或零),为了完整性,您应该检查输入值,即n和k必须大于零 -
@mattbasta: "The homework tag, like other so-called 'meta' tags, is now discouraged," 但是,Adam,请遵循链接的作业指南,包括说明特殊限制、到目前为止您尝试过的内容以及问题的具体部分让您感到困惑。
标签: java recursion combinations