用c语言编写函数,计算组合数c(n,k)=n!/(k!(n-k)!)
时间: 2024-12-15 20:25:43 浏览: 5
在C语言中,我们可以使用递归或循环的方式编写一个函数来计算组合数C(n, k),即从n个不同元素中取出k个元素的所有组合数目。由于涉及到阶乘运算,当n和k较大时可能会导致溢出,所以这里提供一个递推算法的实现,避免直接计算大整数阶乘:
```c
#include <stdio.h>
// 计算阶乘
long long factorial(int n) {
if (n == 0 || n == 1) return 1;
else return n * factorial(n - 1);
}
// 计算组合数 C(n, k)
long long combination(int n, int k) {
if (k > n || k < 0 || n < 0) { // 检查边界条件
return 0;
} else if (k == 0 || k == n) {
return 1; // 当k=0或k=n时,组合数为1
} else {
return factorial(n) / (factorial(k) * factorial(n - k));
}
}
int main() {
int n, k;
printf("请输入n和k的值:");
scanf("%d %d", &n, &k);
long long result = combination(n, k);
printf("C(%d, %d) = %lld\n", n, k, result);
return 0;
}
```
当你运行这个程序时,它会询问输入n和k的值,并输出对应组合数的结果。请注意,由于阶乘计算可能导致数值溢出,对于较大的n和k,应谨慎处理。
阅读全文