C程序计算从n个不同对象中选择k个对象的方法的数量';k';和';n';两者都是整数

C程序计算从n个不同对象中选择k个对象的方法的数量';k';和';n';两者都是整数,c,algorithm,function,combinations,coredump,C,Algorithm,Function,Combinations,Coredump,我编写了一个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);

我编写了一个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);
    }

如何避免呢

问题出在这一行

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
进入分母,并且发生
浮点异常。这就是你的程序出错的原因

对于需要
0
的阶乘的情况。然后这也会起作用,因为
0
的阶乘是1,而不是
0
。。退房。

两个问题:

  • 如果(a==1 | | a==0)
    您应该
    返回1
    ,而不是
    返回0
    。因为
    1=1, 0!=1

  • 您的目的是
    从n个不同的对象中选择k个对象
    。但是您应该添加参数检查,以避免发生从阶乘计算二项式系数是一个非常糟糕的主意。该错误看起来像是一个算术错误(除零、模零等)。您可以自己发现这一点。您应该学习如何使用调试器。编译器无法显示异常。(除非在最奇怪的情况下编译器自己崩溃)好的,第二点没有在投票最高的答案+1中解释。
    if(a==1||a==0)return(1);