C中的二项式系数递归函数带来了错误的结果,为什么?

fra*_*anx 0 c debugging recursion binomial-coefficients

初学者在这里试图了解bug的来源.

我已经写了这个递归函数来找到两个数字之间的二项式系数,这在概念上显然是正确的.然而,对于这两个数字,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;
}
Run Code Online (Sandbox Code Playgroud)

Kla*_*äck 5

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

if ((k=0) || (k==n))
Run Code Online (Sandbox Code Playgroud)

你可能意味着:

if ((k==0) || (k==n))
Run Code Online (Sandbox Code Playgroud)


Mit*_*eat 5

这条线

 if ((k = 0) || (k == n))
Run Code Online (Sandbox Code Playgroud)

应该

  if ((k == 0) || (k == n))  
         ^^
Run Code Online (Sandbox Code Playgroud)

你给零分配零.

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