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

