我正在研究递归函数,并且我了解如何编写基本的函数,但是我的学习指南中有一个我不理解的问题。
。为名为n的递归函数编写代码,以计算nCr。假设可以按以下方式计算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