递增式帕斯卡三角输出错误排查(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"); } }
错误核心点
你的代码有两个关键错误:
coef的初始化逻辑错误:
原帕斯卡三角中coef = 1是基于组合数定义C(i,0)=1,而你改成coef++后,coef会继承上一行的最终值继续累加,而非每一行的侧边值独立设置为i+1(比如第i行的第一个元素应该是i+1,而非依赖上一行的残留值)。这种依赖会导致后续行的侧边值出现不可控的偏差。递推公式不适用:
原代码里的coef = coef * (i - j + 1) / j是组合数的递推公式C(i,j) = C(i,j-1) * (i-j+1)/j,这个公式成立的前提是当前行的第一个元素是1。但你现在把侧边改成递增数值,目标三角的内部元素逻辑已经改变(比如应该遵循左上方+正上方的累加规则),原组合数递推公式不再适用,因此内部元素计算必然错误。
内容的提问来源于stack exchange,提问作者Dan D
相关产品推荐
相关产品推荐

