【问题标题】:Binomial coefficient recursive function in C - brings wrong result, why?C中的二项式系数递归函数 - 带来错误的结果,为什么?
【发布时间】:2018-04-19 19:48:44
【问题描述】:

这里的初学者试图了解错误的来源。

我已经编写了这个递归函数来查找两个数字之间的二项式系数,这在概念上显然是正确的。然而,对于这两个数字,n =4 和 k=2,我应该得到 6,而我实际上得到 16。知道为什么会这样吗?

#include<stdio.h>

int binomial(int n, int k)
{
  if ((k = 0) || (k == n))
    return 1;
  if (k>n)
    return 0;

  return binomial(n - 1, k - 1) + binomial(n - 1, k);
}

int main()    
{
  int a, b, res;
  a = 4;
  b = 2;
  res = binomial(a, b);
  printf("The result is %d", res);
  return 0;
}

【问题讨论】:

  • 用-Wall编译
  • 如果对你有帮助,请考虑接受答案(它也给你 2 个代表点 :))

标签: c debugging recursion binomial-coefficients


【解决方案1】:

这行看起来不对,因为它把 0 分配给 k:

if ((k=0) || (k==n))

你的意思可能是:

if ((k==0) || (k==n))

【讨论】:

    【解决方案2】:

    这一行

     if ((k = 0) || (k == n))
    

    应该是

      if ((k == 0) || (k == n))  
             ^^
    

    您将零分配给 k。

    正如@Michael Walz 指出的那样,使用-Wall 编译以打开所有编译警告是一种很好的做法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2022-11-18
    • 2020-05-21
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多