Python打印帕斯卡三角中二项式系数计算公式的推导疑问
帕斯卡三角系数公式推导
基础前提
- 帕斯卡三角的第
i行(代码中从0开始计数)的第k个元素(同样从0开始计数),等价于组合数公式C(i, k),含义是从i个不同元素中选k个的方案数 - 组合数的标准计算公式是:
C(i, k) = i! / (k! * (i - k)!),其中!代表阶乘运算 - 代码中每一行的初始值
coff = 1,对应的就是C(i, 0) = 1,也就是每行的第一个元素固定为1
公式推导
你困惑的公式本质是同一行内相邻组合数的递推关系,推导过程如下:
我们需要从当前的第k个组合数C(i, k),推导得到同一行下一个元素C(i, k+1):
- 先写出
C(i, k+1)的展开式:C(i, k+1) = i! / [ (k+1)! * (i - (k+1))! ] = i! / [ (k+1)*k! * (i -k -1)! ] - 将
C(i, k)的公式做变形:C(i, k) = i! / (k! * (i -k)!) = i! / (k! * (i -k) * (i -k -1)! )
调整后得到i!/(k! * (i -k -1)!) = C(i, k) * (i -k) - 把上面的结果代入
C(i, k+1)的展开式:C(i, k+1) = [ C(i, k) * (i -k) ] / (k + 1)
这就完全对应了代码里的公式:coff = int(coff * (i - k) / (k + 1))
补充说明
- 组合数的计算结果必然是正整数,所以这里的除法运算结果一定是整数,用
int()转换不会出现精度丢失的问题 - 举个实际例子验证:比如取
i=3(对应帕斯卡三角第4行,元素为1、3、3、1)- k=0时,coff初始为1(C(3,0)=1),计算下一个值:
1 * (3-0)/(0+1) = 3,也就是C(3,1)=3 - k=1时,coff为3,计算下一个值:
3*(3-1)/(1+1) = 3*2/2=3,也就是C(3,2)=3 - k=2时,coff为3,计算下一个值:
3*(3-2)/(2+1)=3*1/3=1,也就是C(3,3)=1
完全和帕斯卡三角的数值匹配。
- k=0时,coff初始为1(C(3,0)=1),计算下一个值:
内容的提问来源于stack exchange,提问作者JumberGodo
相关产品推荐
相关产品推荐

