交替级数求和函数疑问:stop参数含义与while循环实现方法
交替级数求和函数实现指导
先搞懂stop的作用
stop是停止累加的阈值:我们要逐项计算级数的每一项,只要当前项的绝对值大于stop,就把它加到总和里;当某一项的绝对值≤stop时,就停止循环,不再继续往后加了。
- 比如stop=0.249时,第4项是
1/4=0.25,绝对值大于0.249,所以要加;第5项是1/5=0.2,小于0.249,停止,所以取前4项求和。 - 比如stop=0.199时,第5项
1/5=0.2大于0.199,要加;第6项1/6≈0.166小于0.199,停止,所以取前5项求和。
你的代码问题在哪
- 错误使用递归调用
alternating_while(n-1),完全偏离了题目要求的while循环实现逻辑,还会导致错误或无限递归。 return total放在while循环内部,第一次循环就直接返回,根本没完成累加过程。- 没有正确更新每一项的值和项数n的计数。
正确的实现代码
def alternating_while(stop): total = 0.0 n = 1 while True: # 计算当前项的值 term = (-1) ** (n + 1) / n # 判断当前项是否符合保留条件,不符合就退出循环 if abs(term) <= stop: break # 符合条件就累加到总和 total += term # 更新项数,准备计算下一项 n += 1 return total
代码逻辑解释
- 初始化总和
total为浮点数0.0,避免整数除法导致的精度问题;项数n从1开始计数。 - 用
while True构建无限循环,直到遇到退出条件才终止。 - 每次循环先计算当前项
term,通过(-1)**(n+1)控制正负号,除以n得到项的具体值。 - 用
abs(term)判断是否满足保留条件:如果当前项的绝对值≤stop,说明这一项及后续所有项的绝对值都会更小,直接退出循环。 - 若当前项符合要求,就把它加到总和里,然后将n自增1,准备计算下一项。
- 循环结束后返回最终累加的总和。
测试验证
- 调用
alternating_while(0.249),会计算前4项:1 - 1/2 + 1/3 - 1/4 = 0.583333... - 调用
alternating_while(0.199),会计算前5项:1 - 1/2 + 1/3 - 1/4 + 1/5 = 0.783333...
内容的提问来源于stack exchange,提问作者Ruby Gloom
相关产品推荐
相关产品推荐

