C中的二项式系数递归解

时间:2017-02-14 14:09:12

标签: c recursion binomial-coefficients

为什么我的二项式系数崩溃的解决方案?我真的试图学习递归,但我仍然认为我不清楚这一点。我想知道是否有人可以帮助我了解递归,以及如何递归思考?

即使我写了一个很好的基础案例,我的程序也会崩溃。任何通过明确演示学习递归的链接对我都非常有用。

这是我的二项式系数代码,我无法找到错误/错误,寻找你的帮助。

#include<stdio.h>   

long long m,n,o,p,result;  

long long binomial(long long  n,long long m)
{
   if(n==m)
       return 1;
   else {
       if(m==0)
           return 1;
       else {
           o=binomial(n-1,m);
           p=binomial(n-1,m-1);
           return o+p;
       }
   }
}

int main()
{
    printf("Please Enter The Value Of n:\n");
    scanf("%lld",&n);

    printf("Now Enter The value of m:\n");    
    scanf("%lld",&m);

    result = binomial(n,m);
    printf("Resultant Binomial coefficient: %lld\n",result);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

n&gt; = k 时,仅为 n k 对定义二项式系数。在二项式系数表达式中使用 n k 是常规的,但这些对应于代码中的nm

您需要包含一些输入错误检查以避免出现问题。 n小于m时代码崩溃,因为每次执行语句o=binomial(n-1,m);时,被调用函数中n的值都会减少,但是n }已经小于m,这是非零的(如果m为零,则函数只返回1),因此n == m永远不会发生。

顺便说一下,您可以通过几种方式改进代码。使用全局变量通常是一个坏主意,最好移动声明:

long long m, n, result;

main(),需要这些变量。此外,main()的功能签名应为int main(void)。您可以大大加强binomial()函数中的逻辑,无需op

long long binomial(long long  n,long long m)
{
    if (m != 0 && n != m) {
        return binomial(n-1, m) + binomial(n-1, m-1);
    } else {
        return 1;
    }
}