Go实现整数平方和计算时如何等全部输入完成后再统一输出结果
整数平方和计算器统一输出实现方案
问题背景
基于Go语言开发的整数平方和计算器,核心功能为计算输入整数的平方和,计算过程自动排除所有负整数,代码要求全程使用递归实现、不允许使用循环。
当前程序存在异常:每处理完一个测试用例就立刻输出计算结果,还未完成全部输入就提前产生输出,不符合预期效果。
预期输入输出
样例输入:
2 4 3 -1 1 14 5 9 6 -53 32 16
样例输出:
206 1397
原问题代码
// Calculate the sum of squares of given integers, excluding any negatives In Go lang // Code written by Pintu Sharma // Enter Total number of test cases := N // N Times : // Enter Total number of values. := num // Enter [num] times int values // sample input: // 2 // 4 // 3 -1 1 14 // 5 // 9 6 -53 32 16 // sample output : // 206 // 1397 // sum of square, only positive numbers without using any loop // That's why I use recursion in Go // my Code in Go lang package main import "fmt" // Taking Number of Test Cases and values func test_cases(n int) { if n <= 0 { return } var num int // total number of values fmt.Scanf("%d", &num) fmt.Println(sum_of_square(num)) test_cases(n-1) } // Calculating sum of square for each test case func sum_of_square(value_count int) int { if value_count == 0 { return 0 } var value int // take input value for generating sum of square fmt.Scanf("%d", &value) // if only value is positive if value > 0 { return value*value + sum_of_square(value_count - 1) } return sum_of_square(value_count - 1) } // Main function func main() { var N int // number of total Test Cases fmt.Scanf("%d", &N) // Take input for each Test Case test_cases(N) }
问题原因
核心原因是原test_cases递归逻辑中,每计算完一个测试用例的平方和就立刻调用fmt.Println打印结果,没有对结果做暂存,因此处理完第一个用例就会触发输出,无需等待全部输入接收完成。
修改方案
全程保留递归实现、不引入任何循环,仅做两处调整:
- 改造测试用例处理逻辑,递归收集所有测试用例的计算结果到切片中,计算过程不触发任何打印操作
- 所有输入处理完成、结果全部收集完毕后,通过递归方式统一打印所有结果
修改后完整代码
package main import "fmt" // 递归计算单组测试用例的正整数平方和,原逻辑无需改动 func sum_of_square(value_count int) int { if value_count == 0 { return 0 } var value int fmt.Scanf("%d", &value) if value > 0 { return value*value + sum_of_square(value_count - 1) } return sum_of_square(value_count - 1) } // 递归收集所有测试用例的计算结果,过程中不打印 func collectResults(n int) []int { if n <= 0 { return []int{} } var num int fmt.Scanf("%d", &num) currentSum := sum_of_square(num) // 递归处理剩余测试用例 restSums := collectResults(n-1) return append([]int{currentSum}, restSums...) } // 递归打印所有结果,不使用循环 func printResults(results []int, idx int) { if idx >= len(results) { return } fmt.Println(results[idx]) printResults(results, idx+1) } func main() { var N int fmt.Scanf("%d", &N) // 先收集完所有结果 allResults := collectResults(N) // 全部输入处理完成后统一输出 printResults(allResults, 0) }
效果验证
修改后程序会先逐行读取所有输入、递归完成所有测试用例的平方和计算,待所有输入读取完毕后才会统一输出结果,完全匹配样例的输入输出要求,且全程未使用任何循环,符合原代码的递归实现约束。
内容的提问来源于stack exchange,提问作者JDWAS
相关产品推荐
相关产品推荐

