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

如何让Python递归程序在所有输入完成后按输入顺序打印结果

解决递归处理测试用例并按输入顺序输出结果的问题

核心问题是你需要先收集所有测试用例的计算结果,再统一按输入顺序输出,而不是在递归过程中直接打印。递归栈的特性会导致先处理的测试用例后返回,所以需要把结果存储起来,最后再按顺序输出。

修改后的完整代码

def test(cases):
    if cases == 0:
        return []
    # 读取当前测试用例的输入
    count = int(input())
    nums_str = input().strip()
    nums_list = nums_str.split()
    # 计算当前测试用例的平方和
    current_sum = calculate_sum(count, nums_list)
    # 递归获取剩余测试用例的结果
    remaining_results = test(cases - 1)
    # 将当前结果放在剩余结果的前面,保证输入顺序
    return [current_sum] + remaining_results

def calculate_sum(nums_left, nums_list):
    if nums_left == 0:
        return 0
    # 处理空字符串的情况(比如输入末尾有空格)
    num = int(nums_list[0]) if nums_list[0] else 0
    # 移除已处理的元素
    rest_list = nums_list[1:]
    # 递归计算平方和,用**避免math.pow的浮点数问题
    return num ** 2 + calculate_sum(nums_left - 1, rest_list)

def print_results(results):
    if not results:
        return
    # 打印第一个元素,递归打印剩余元素
    print(results[0])
    print_results(results[1:])

def main():
    total_cases = int(input())
    all_results = test(total_cases)
    print_results(all_results)

if __name__ == "__main__":
    main()

关键修改说明

  1. 收集结果而非直接打印:
    • test函数不再直接打印结果,而是返回一个结果列表。递归时先获取剩余测试用例的结果,再把当前结果添加到列表头部,确保最终列表的顺序和输入顺序一致。
  2. 修复平方和计算逻辑:
    • 移除了不必要的>=1判断,非负整数的平方直接计算即可(0的平方为0,不影响结果)。
    • 用num ** 2替代math.pow,避免浮点数转换可能带来的精度问题。
    • 处理了输入字符串可能存在的空元素(比如输入末尾有空格时,split()会生成空字符串)。
  3. 递归打印结果:
    • 新增print_results函数,用递归遍历结果列表并打印,完全避免使用循环。

测试验证

输入示例:

3
5
7 14 2 3 5
4
3 1 7 2
3 
2 2 6

输出结果:

283
63
44

内容的提问来源于stack exchange,提问作者Wes P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:32:39