C程序,用于计算从n个不同对象中选择k个对象的方法数.'k'和'n'都是整数

SRI*_*SHA 4 c algorithm combinations coredump function

我编写了一个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);
    }
Run Code Online (Sandbox Code Playgroud)

但编译器显示以下错误消息

floating point exception (core dumped)
Run Code Online (Sandbox Code Playgroud)

怎么避免呢?

Har*_*ris 12

问题出在这一行

if(a==1||a==0)return(0);
Run Code Online (Sandbox Code Playgroud)

它应该是

if(a==1||a==0)return(1);
Run Code Online (Sandbox Code Playgroud)

在计算阶乘时,n*(n-1)*(n-2)...*(2)*(1).最后请注意,我们乘以1而不是零.乘以0会使因子0.后来当你进行分裂时,0分母floating point exception就会出现,并且正在发生.这就是你的程序出错的原因.

对于0需要阶乘的情况.然后也这会工作,由于阶乘0是1,没有 0.检查这个出来.