请求协助完成Soloway平均值函数的迭代转递归实现
完善Soloway平均值的递归实现
先明确迭代版的核心功能:持续接收用户输入的数字,直到输入99999时停止,最终计算所有非负输入的平均值并输出。原递归版本存在终止条件错误、递归调用未获取新输入、逻辑分支混乱等问题,以下是修复后的完整实现:
原迭代版代码(优化变量名避免冲突)
def solowayAverage(): number = int(input("Enter a number: ")) sum_total = 0 # 不用sum做变量名,避免覆盖Python内置函数 count = 0 while number != 99999: if number >= 0: sum_total += number count += 1 number = int(input("Enter a number: ")) print("The average is: ", sum_total / count if count != 0 else "No valid numbers entered") solowayAverage()
修复后的递归版代码
def solowayaveragerec(current_num, sum_total, count): # 终止条件:输入99999时计算并输出结果 if current_num == 99999: if count == 0: print("No valid numbers entered") else: print("The average is: ", sum_total / count) return # 处理非负数字,累加和计数 if current_num >= 0: sum_total += current_num count += 1 # 获取新输入并递归调用 next_num = int(input("Enter a number: ")) solowayaveragerec(next_num, sum_total, count) # 初始调用:先获取第一个输入值 first_num = int(input("Give me a number: ")) solowayaveragerec(first_num, 0, 0)
关键修改说明
- 修正终止逻辑:当输入为
99999时停止递归,同时判断计数是否为0,避免出现除以0的错误。 - 补充递归调用逻辑:每次处理完当前数字后,主动获取新的输入值,再传入递归函数,保证递归能持续接收新输入。
- 对齐迭代版逻辑:负数不参与累加,直接进入下一次递归,和迭代版的行为保持一致。
- 优化变量命名:将
sum改为sum_total,避免和Python内置的sum()函数冲突。
内容的提问来源于stack exchange,提问作者user19850602
相关产品推荐
相关产品推荐

