Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为组合编写递归函数_Java_Recursion_Discrete Mathematics - Fatal编程技术网

Java 如何为组合编写递归函数

Java 如何为组合编写递归函数,java,recursion,discrete-mathematics,Java,Recursion,Discrete Mathematics,我正在复习递归函数,我知道如何编写基本函数,但我在学习指南中有一个问题我不明白 。为计算nCr的名为Combinations的递归函数编写代码。假设nCr的计算方法如下: nCr = 1 if r = 0 or if r = n and nCr = (n-1)C(r-1) + (n-1)Cr 有人能帮我解决这个问题或者用外行的语言解释一下吗?谢谢大家! 这个问题确实包含了所有信息。它告诉你如何计算nCr——很多时候,你是通过计算另一个nCr(参数较小)来计算的。因此,您的函数可能如下所示: i

我正在复习递归函数,我知道如何编写基本函数,但我在学习指南中有一个问题我不明白

。为计算nCr的名为Combinations的递归函数编写代码。假设nCr的计算方法如下:

nCr = 1 if r = 0 or if r = n and
nCr = (n-1)C(r-1) + (n-1)Cr

有人能帮我解决这个问题或者用外行的语言解释一下吗?谢谢大家!

这个问题确实包含了所有信息。它告诉你如何计算nCr——很多时候,你是通过计算另一个nCr(参数较小)来计算的。因此,您的函数可能如下所示:

int nCr(n, r) {
  if (r == 0 || r == n) return 1;  // stop recursion, we know the answer.
  return nCr(n-1, r-1) + nCr(n-1, r); // the answer is made of the sum of two "easier" ones
}
这是我能做到的最字面的翻译。让我们通过计算来了解它在实践中是如何工作的

nCr(4,2)
= nCr(4-1, 2-1) + nCr(4-1, 2)
= nCr(3, 1) + nCr(3, 2)
= nCr(3-1, 1) + nCr(3-1,0) + nCr(3-1, 2-1) + nCr(3-1, 2)
= nCr(2, 1) + nCr(2,0) + nCr(2,1) + nCr(2,2)
= nCr(1, 0) + nCr(1,1) + 1 + nCr(1,0) + nCr(1,1) + 1
= 1 + 1 + 1 + 1 + 1 + 1
= 6
当然,我们已经知道:

nCr(4,2) = (4 * 3) / (2 * 1) = 6

递归函数包括对自身的调用和终止情况

在您的示例中,如果r=0或r=n,则nCr=1构成终止

(n-1)C(r-1)+(n-1)Cr
是递归

所以你的代码应该是这样的

int nCR(int n, int r){
    if (r == 0 || r == n){
        return 1; //terminate
    }
    else{
        return nCr(n-1, r-1) + nCr(n-1, r); //recursive calls
    }
}

谢谢你们的回答!我会接受他们当它允许我为你的answer@Quincunx-谢谢。很抱歉看到你删除了你的答案。看来你考虑得很周到。[不确定在哪个代表处可以看到删除的问题,但我可以…]