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

交替调和级数递归函数输出为负,如何修正或反转结果?

问题分析与解决
  • 你的代码核心问题出在运算符优先级上:Python中幂运算**的优先级高于负号,所以-1**(n%2)实际上等价于-(1**(n%2)),也就是无论n是奇数还是偶数,这个表达式永远返回-1,导致递归累加时符号完全反转,最终结果全为负值。

  • 举个简单例子验证:当n=2时,原代码计算过程为:

    alternating(2) = 1/2 + (-1**(2%2)) * alternating(1)
    = 0.5 + (-1**0)*1
    = 0.5 + (-1)*1 = -0.5
    

    但正确的交替调和级数n=2结果应该是1 - 1/2 = 0.5,符号完全相反。

  • 修正方法:把-1用括号包裹,让它作为整体参与幂运算,即改成(-1)**(n%2)。修正后的代码:

    def alternating(n):
        if n == 1:
            return 1
        else:
            return 1/n + (-1)**(n % 2) * alternating(n-1)
    
  • 你也可以用更直观的方式判断符号,比如根据n的奇偶性直接决定加减:

    def alternating(n):
        if n == 1:
            return 1
        # 偶数项为减,奇数项(除n=1)为加
        sign = -1 if n % 2 == 0 else 1
        return sign * (1/n) + alternating(n-1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:03