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

递增式帕斯卡三角输出错误排查(C语言)

错误原因分析:自定义侧边递增的类帕斯卡三角

我想要打印一个类似帕斯卡三角的三角形,但侧边为递增数值而非固定值1。

  • 常规帕斯卡三角:(对应示意图)
  • 目标三角:(对应示意图)

常规帕斯卡三角实现代码

void PascalTriangle(int rows) {
    int i =0,j = 0,space,coef = 0;
    for (i = 0 ; i<rows ; i++){
        for (space = 1 ; space <= rows - i ; space++) 
            printf(" ");
        
        for (j = 0 ; j <= i ; j++) {
            if (i == 0 || j == 0)
                coef = 1;
            else  
                coef = coef * (i - j + 1) / j;
            printf("%4d",coef);
        }
        printf("\n");
    }
}

我的尝试代码

void PascalTriangle(int rows) {
    int i =0,j = 0,space,coef = 0;
    for (i = 0 ; i<rows ; i++){
        for (space = 1 ; space <= rows - i ; space++) 
            printf(" ");
        
        for (j = 0 ; j <= i ; j++) {
            if (i == 0 || j == 0)
                coef ++;
            else  
                coef = coef * (i - j + 1) / j;
            printf("%4d",coef);
        }
        printf("\n");
    }
}

错误核心点

你的代码有两个关键错误:

  1. coef的初始化逻辑错误:
    原帕斯卡三角中coef = 1是基于组合数定义C(i,0)=1,而你改成coef++后,coef会继承上一行的最终值继续累加,而非每一行的侧边值独立设置为i+1(比如第i行的第一个元素应该是i+1,而非依赖上一行的残留值)。这种依赖会导致后续行的侧边值出现不可控的偏差。

  2. 递推公式不适用:
    原代码里的coef = coef * (i - j + 1) / j是组合数的递推公式C(i,j) = C(i,j-1) * (i-j+1)/j,这个公式成立的前提是当前行的第一个元素是1。但你现在把侧边改成递增数值,目标三角的内部元素逻辑已经改变(比如应该遵循左上方+正上方的累加规则),原组合数递推公式不再适用,因此内部元素计算必然错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:51