我写了一个C程序来计算使用函数从n个不同对象中选择k个对象的方法的数量。
#include<stdio.h>
long f(int a)
{
if(a==1||a==0)return(0);
else return(a*f(a-1));
}
int combination(int N,int K)
{
long int NF,KF,NMKF;
NF=f(N);
KF=f(K);
NMKF=f(N-K);
return(NF/(KF*NMKF));
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
combination(n,k);
}
但编译器显示以下错误消息
floating point exception (core dumped)
如何避免它?
答案 0 :(得分:12)
问题出在这一行
if(a==1||a==0)return(0);
应该是
if(a==1||a==0)return(1);
计算阶乘,n*(n-1)*(n-2)...*(2)*(1)
。最后请注意,我们乘以1
而不是零。与0
相乘会产生阶乘0
。后来当你进行分割时,0
出现在分母中,floating point exception
正在发生。这就是你的程序出错的原因。
对于需要0
的阶乘的情况。然后这也可行,因为0
的阶乘为1且不 0
。请检查this。
答案 1 :(得分:3)
两个问题:
if(a==1||a==0)
您应该return 1
,而不是return 0
。因为1!=1, 0!=1
。choose k objects from n distinct objects
。但是你应该添加参数检查以便不发生n<k
。如果我们输入n=2, k=3
。程序将会出错。这是坏的!
我希望这可以帮到你。