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

我的二项式系数计算程序为何无法正常运行?

杨辉三角(二项式系数)计算代码修复

问题根源

  • 参数顺序完全颠倒:二项式系数C(n,k)表示从n个元素中选k个,对应杨辉三角第n行的第k个元素。你调用binominal(i,j)时,把n(行号j)和k(列号i)搞反了,导致计算的是C(i,j),完全不符合逻辑。
  • 语法错误:main函数里的return 0;写在了函数大括号外面,编译会直接报错。
  • 阶乘计算效率低且易溢出:三次循环计算阶乘的方式不仅冗余,而且int类型存储阶乘很快会溢出(比如13!就超过了int的最大值)。

修复后的代码

#include <stdio.h>
#include <stdlib.h>

int binominal(int n, int k) {
    // 利用对称性C(n,k)=C(n,n-k),减少计算量
    if (k > n - k) {
        k = n - k;
    }
    int result = 1;
    // 逐步乘除,保证每一步都是整数,避免提前溢出
    for (int i = 1; i <= k; i++) {
        result = result * (n - k + i) / i;
    }
    return result;
}

int main(int argc, const char *argv[]) {
    // 检查参数是否存在
    if (argc < 2) {
        printf("请传入行数参数\n");
        return 1;
    }
    int row = atoi(argv[1]);

    for (int j = 0; j < row; j++) {
        for (int i = 0; i <= j; i++) {
            // 修正参数顺序:binominal(行号, 列号)
            printf(" %d ", binominal(j, i));
        }
        printf("\n");
    }

    return 0;
}

修复说明

  1. 修正参数传递:将binominal(i,j)改为binominal(j,i),对应正确的二项式系数C(j,i)。
  2. 修复语法问题:把return 0;移回main函数的大括号内部。
  3. 优化计算逻辑:
    • 利用二项式系数的对称性,只计算较小的那一半,减少循环次数。
    • 采用逐步乘除的方式替代三次阶乘计算,既避免了冗余运算,又保证每一步结果都是整数,大幅降低了溢出风险。
  4. 增加参数校验:当用户未传入行数参数时,给出明确提示。

测试验证

输入参数4时,输出结果符合预期:

1 
 1  1 
 1  2  1 
 1  3  3  1 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:55:20