You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言递归二项式系数函数返回错误结果,求原因

你的二项式系数递归函数bug分析与修复

嘿,我一眼就揪出问题所在了——你在终止条件的判断里犯了个超容易踩坑的语法错误!

错误根源

看你代码里这一行:

if ((k = 0) || (k == n)) return 1;

这里你用了赋值运算符=,但实际上需要的是比较运算符==。

这个错误的影响非常关键:

  • k = 0会直接把变量k的值改成0,而这个表达式的返回值是被赋的0(在C里代表逻辑假)。
  • 因为左边表达式为假,||会继续判断右边的k == n,但此时k已经被改成0了,只有当n等于0时才会触发返回1的条件,完全破坏了二项式系数的终止逻辑(原本应该是k=0或k=n时返回1)。
  • 失去正确终止条件的递归会疯狂调用自身,最终算出完全错误的结果(你得到的16就是这么来的),甚至可能引发栈溢出。

修复后的代码

只需要把赋值改成比较,就能得到正确结果:

#include<stdio.h>
int binomial(int n, int k) {
    // 把k = 0改成k == 0
    if ((k == 0) || (k == n)) return 1;
    if (k > n) return 0;
    return binomial(n - 1, k - 1) + binomial(n - 1, k);
}

int main() {
    // 测试n=4,k=2
    printf("%d\n", binomial(4, 2)); // 现在会输出正确的6
    return 0;
}

给初学者的小建议

写条件判断时,可以试着把常量放在左边(比如写成0 == k而非k == 0),这样如果不小心写成0 = k,编译器会直接报错,帮你提前规避这类低级错误~

内容的提问来源于stack exchange,提问作者franx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:00:32