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

请求协助完成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:03:36