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)
这行看起来不对,因为它将0分配给k:
if ((k=0) || (k==n))
Run Code Online (Sandbox Code Playgroud)
你可能意味着:
if ((k==0) || (k==n))
Run Code Online (Sandbox Code Playgroud)
这条线
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打开所有编译警告是一种很好的做法 .