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

如何实现负整数的扩展帕斯卡三角形?代码问题排查求助

负整数扩展帕斯卡三角形的组合数计算修正
  • 问题根源:你用的标准组合数公式 C(n,k) = n!/(k!(n-k)!) 只适用于非负整数n,当n为负数时,这个公式完全不适用——代入负n计算阶乘会得到错误的小数结果,这就是你测试n=-7、k=6时得到0.166的原因。
  • 广义组合数的正确定义:针对负整数n=-m(m是正整数),非负整数k的情况,扩展帕斯卡三角形里的组合数要按广义组合数计算:
    C(-m, k) = (-1)^k * C(m + k - 1, k)
    其中C(m+k-1,k)是普通正整数组合数,计算方式为 (m+k-1)*(m+k-2)*...*m / k!
  • 你的测试用例验证:n=-7、k=6时,m=7,代入公式得 (-1)^6 * C(7+6-1,6) = 1 * C(12,6),而C(12,6)=924,和预期结果一致。
  • 修改nCk函数的具体思路:
    1. 先处理边界:如果k=0,直接返回1(任何n的C(n,0)都是1)
    2. 若n为负数,取m=-n;然后用循环计算C(m+k-1,k):从1到k循环,每次累积计算 结果 = 结果 * (m + i - 1) // i(用整数除法避免小数误差)
    3. 最后根据k的奇偶性调整符号:k是偶数则结果不变,奇数则取结果的相反数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:26