📅  最后修改于: 2023-12-03 14:49:58.256000             🧑  作者: Mango
递归是一种常见的编程技巧,适用于需要重复执行相同操作的问题。本文将介绍如何使用递归来计算组合数 nCr 的值。
组合数 C(n, r) 表示从 n 个不同元素中取出 r 个元素的组合方式数。其中,n 和 r 都是非负整数,并且满足 r ≤ n。
组合数的计算公式如下:
C(n, r) = n! / (r! * (n-r)! )
其中,! 表示阶乘运算。
以下是使用递归计算组合数的 C++ 代码片段:
#include <iostream>
using namespace std;
int fact(int n) {
if (n == 0) {
return 1;
} else {
return n * fact(n-1);
}
}
int nCr(int n, int r) {
if (r == 0 || n == r) {
return 1;
} else {
return fact(n) / (fact(r) * fact(n-r));
}
}
int main() {
int n, r;
cout << "Enter value of n: ";
cin >> n;
cout << "Enter value of r: ";
cin >> r;
cout << "nCr value is: " << nCr(n, r);
return 0;
}
在上述代码中,fact() 函数用于计算一个数的阶乘,nCr() 函数则使用递归来计算组合数。
递归的终止条件是当 r 为 0 或者 n 与 r 相等时,此时组合数为 1。
如果 n 和 r 均不满足终止条件,则递归调用 nCr() 函数来计算 C(n-1, r-1) 和 C(n-1, r)。
最终返回 C(n-1, r-1) + C(n-1, r) 的值,即 C(n, r) 的值。
以上介绍了如何使用递归计算组合数 nCr 的值,希望对大家有所帮助。在实际编程中,使用递归要注意终止条件的正确性和递归调用过程中传递参数的正确性。