无法创建正确的N选择R方法

问题描述 投票:0回答:1

我有编写Java代码的任务:

给定一组n个项目,我们可以从n中选择r个元素的方式有多少?这被称为“选择函数”(或二项式系数),我们可以使用下面定义的递归关系计算n的r大小子集的数量(其中顺序不重要)。请注意,此定义建立在阶乘的概念之上,因此请确保首先理解示例代码并在继续之前生成一个工作因子方法.C(n,r)= n! /(r!*(n-r)!)

我完全理解最简单的阶乘递归形式如何工作,但到目前为止我的代码是这样的:

    public static int NChooseR(int n, int r)
        {
            if( n == 1 || r == 1)
                return 1;
            else
                return (n * NChooseR( n - 1, r)/ n * NChooseR ((n-r) - 1, r) );
        }

所以例如,如果我的输入是5为n和3为r这个方法应该返回10.我试图弄清楚如何逐个编写这个方法所以我目前的代码应打印出60,因为(n * NChooseR (n - 1,r)应该是5的阶乘,即120和n * NChooseR((nr) - 1应该是5 - 3的阶乘,实际上是2的阶乘,但是我得到了一个堆栈溢出我已经尝试了很多其他事情,我只是盯着我的代码尝试不同的事情无济于事。如果有人能够回答这个问题,你可以尝试解释它,就像我5岁那样因为到目前为止,没有关于互联网的信息对我有帮助,我非常沮丧,我不知道从哪里开始。

java recursion combinations binomial-coefficients
1个回答
0
投票

第一:自r=1以来C(n,1) = n!/(n-1)! = n的初始值是错误的。 自r=0以来应该是C(n,0) = 1

第二:使用这种循环公式 C(n,r) = C(n-1,r) + C(n-1,r-1) n,r最后到达1,0并用预先计算的初始值C(1,0) = 1C(n,0) = 1识别

© www.soinside.com 2019 - 2024. All rights reserved.