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

如何定义首参数为整数列表的Python MZVs部分和计算函数?

多重Zeta值(MZVs)部分和的Python函数优化

数学领域的**多重zeta值(MZVs)**理论于1992年左右被提出,研究的是参数化嵌套无穷级数的性质,这类数值的计算复杂度较高。近期我尝试用Python计算特定MZVs的基本部分和。

以下代码可通过修改S和n,计算多重zeta-star值(如$\zeta^*(10,2,1,1,1)$)的第20项部分和,或其他类似实例:

S = (10, 2, 1, 1, 1)
n = 20

l = len(S)

def F(d, N):
    if d == 0:
        return 1
    else:
        return sum(F(d-1, k)/(k**S[-d]) for k in range(1, N+1))

print(F(l, n))

d维MZVs的部分和本质上由构成d元组$(s₁,…,s_d)$的参数以及求和上限$n$决定。

我的疑问是:能否定义一个调用更友好的函数F([s₁,…,s_d], n),第一个参数为整数列表,第二个参数为求和上限$n$?无需分别定义S和n,直接以F([10, 2, 1, 1, 1], 20)或F([2, 1], 100)这类形式调用。


优化后的实现

可以通过嵌套递归函数的方式实现需求,把参数列表作为函数的第一个输入,内部复用原有的递归逻辑:

def F(s_list, n):
    def inner(d, N):
        if d == 0:
            return 1
        else:
            # 复用原逻辑,从传入的参数列表中取对应元素
            return sum(inner(d-1, k)/(k**s_list[-d]) for k in range(1, N+1))
    # 调用内部递归函数,传入参数列表的长度和求和上限
    return inner(len(s_list), n)

# 调用示例
print(F([10, 2, 1, 1, 1], 20))
print(F([2, 1], 100))

这个版本的函数直接接收参数列表和求和上限,调用方式更直观,完全保留了原有的计算逻辑,同时避免了单独定义全局变量S的步骤。

内容的提问来源于stack exchange,提问作者Marian G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:31