gpt4 book ai didi

java - 递归得到n人k组不同组合的个数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:54 26 4
gpt4 key购买 nike

我正在使用 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);
}

但是它返回错误的值。前两行是基本情况,也就是说如果有一组,那么只有一种方法可以将人们分开,这是有道理的。另一种情况是人数和组数一样多,在这种情况下,只有一种方法可以将他们分开,每个组一个人。最后一个语句是我认为我遇到问题的地方,我会认为它每次进行递归调用时,必须取出一个人(n 是人数,所以 n-1)并且那个人可以 ether加入一个组 (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

最佳答案

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

... and that person can ether join a group (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)

关于java - 递归得到n人k组不同组合的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com