交替调和级数递归函数输出为负,如何修正或反转结果?
问题分析与解决
你的代码核心问题出在运算符优先级上: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
相关产品推荐
相关产品推荐

