我正在练习使用Java进行递归,并且遇到了问题。我试图制定一种方法,我称之为“团体”,其中需要许多人和多少个团体,并返回人和团体的不同组合的数量。此外,组中人员的排序并不重要,组的排序也不重要。递归获得n个人和k个组的不同组合的数量
我到目前为止的代码是:
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
请你能给预期并获得答案的例子吗? – 2010-11-07 00:19:57
没有处理'n
2010-11-07 09:51:31
@mattbasta:[“作业与其他所谓的'元'标签一样,现在不鼓励,“](http://meta.stackexchange.com/q/10812),但是,亚当,请遵循链接的作业指导原则,包括说明特殊限制,什么你到目前为止已经尝试过了,问题的具体部分是什么让你感到困惑。 – 2010-11-08 16:13:37