¿Cómo encontrar la suma de enteros utilizando recursión (sin bucles) en Golang?
El programa debe solicitar los valores “número de números” y “números” para cada “número de entradas”, las respuestas son la suma de los cuadrados de estos números. Mi código funciona, pero muestra las respuestas en el orden incorrecto, ¿cómo puedo hacer que funcione correctamente? Las salidas deben mostrarse después de todas las entradas.
Creo que es más fácil entender este programa leyendo las entradas y salidas:
Ingresa el número de entradas // salida
2 // entrada
Ingresa el número de números // salida
2 // entrada
Ingresa los números // salida
1 2 // entrada (segunda respuesta)
Ingresa el número de números // salida
2 // entrada
Ingresa los números
2 3 // entrada (primera respuesta)
ans = 13 // ans = 2^2 + 3^2
ans = 5 () // ans = 1^2 + 2^2
Mi código:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Println(`Ingresa el número de entradas`)
n, _ := reader.ReadString('\n')
n = strings.TrimRight(n, "\r\n")
test_cases, err := strconv.Atoi(n)
if err != nil {
fmt.Println(err)
}
procesar_caso_de_prueba(test_cases, reader)
}
func procesar_caso_de_prueba(casos_de_prueba int, reader *bufio.Reader) {
fmt.Println(`Ingresa el número de números`)
_, _ = reader.ReadString('\n')
fmt.Println(`Ingresa los números`)
entrada, _ := reader.ReadString('\n')
entrada = strings.TrimRight(entrada, "\r\n")
arr := strings.Split(entrada, " ")
casos_de_prueba -= 1
if casos_de_prueba != 0 {
procesar_caso_de_prueba(casos_de_prueba, reader)
}
fmt.Println("ans =", procesar_arreglo(arr, 0))
}
func procesar_arreglo(arr []string, resultado int) int {
num, _ := strconv.Atoi(arr[0])
if len(arr) > 1 {
siguiente := arr[1:]
if num < 0 {
num = 0
}
resultado = num*num + procesar_arreglo(siguiente, resultado)
return resultado
} else {
if num >= 0 {
return num * num
}
return 0
}
}
davy.ai
Para hacer que el programa funcione correctamente y muestre las salidas después de todas las entradas, podemos modificar el código para almacenar las respuestas en un slice y luego imprimirlos una vez que se hayan procesado todas las entradas. Aquí está el código modificado:
En el código modificado, agregamos una nueva función
process_test_cases
que toma el número de casos de prueba y el objeto lector, y devuelve un slice de enteros que contiene las respuestas. Dentro de esta función, recorremos el número de casos de prueba y, para cada caso de prueba, procesamos la entrada utilizando la funciónprocess_array
y agregamos la respuesta al slice de respuestas. Una vez que se han procesado todos los casos de prueba, devolvemos el sliceanswers
.En la función
main
, llamamos aprocess_test_cases
y almacenamos las respuestas en la variableanswers
. Luego recorremos el sliceanswers
e imprimimos cada respuesta.Esto debería producir la salida deseada donde todas las entradas se procesan primero y luego se muestran las respuestas en el orden correcto.