我有编写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岁那样因为到目前为止,没有关于互联网的信息对我有帮助,我非常沮丧,我不知道从哪里开始。
第一:自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) = 1
和C(n,0) = 1
识别