Problema 2 · Programació II UDL 2010
Tema: Recursión: diseño, traza y diagramas de llamadas · Del examen Examen Primer Parcial Noviembre 2010 (2010)
Enunciado
Problema 2. Suma recursiva de diferencias cuadráticas
Dados dos vectores de números en coma flotante ( double) de igual tamaño, se desea implementar un método que obtenga la suma posicional de las diferencias al cuadrado entre sus componentes:
En Java el método envoltorio presenta la siguiente signatura:
public double sumOfSquaredDiffs(double[] a, double[] b) {
//...
}
Para implementar la solución de forma recursiva, se añade un parámetro adicional que señale el índice sobre el que se opera:
public double squaredDiffs(double[] a, double[] b, int pos) {
//...
}
Se pide:
a)
Diseñar la función recursiva squaredDiffs razonando y justificando su funcionamiento correcto (caso base, caso recursivo y convergencia).
public double squaredDiffs(double[] a, double[] b, int pos) {
}
b)
Indicar la llamada inicial que efectúa el método envoltorio sumOfSquaredDiffs para computar el total sobre todos los elementos de los vectores.
public double sumOfSquaredDiffs(double[] a, double[] b) {
}

Solución
Según los criterios oficiales de corrección
a. Diseñar la función recursiva squaredDiffs razonando y justificando su funcionamiento correcto (caso base, caso recursivo y convergencia).
Solución: Esquema conceptual: Recorremos los vectores desde el índice pos hasta el final (a.length). En cada llamada procesamos la posición actual (a[pos] - b[pos])^2 y le sumamos el resultado de procesar recursivamente el resto del array a partir de pos + 1. - Caso base: Cuando pos == a.length, hemos llegado al final del vector (o los vectores están vacíos). No quedan elementos por sumar, por lo que se retorna 0.0. - Caso recursivo: Cuando pos < a.length, se calcula la diferencia al cuadrado en la posición pos y se suma la llamada con pos + 1: (a[pos] - b[pos])^2 + squaredDiffs(a, b, pos + 1). - Terminación: En cada invocación el índice pos se incrementa en 1, con lo que la distancia a.length - pos decrece estrictamente hasta alcanzar el caso base pos == a.length.
a. Implementación en Java de la función recursiva squaredDiffs:
Solución: ```java if (pos == a.length) { return 0.0; } else { double diff = a[pos] - b[pos]; return (diff * diff) + squaredDiffs(a, b, pos + 1); } ```
b. Indicar la llamada inicial que efectúa el método envoltorio sumOfSquaredDiffs para computar el total sobre todos los elementos de los vectores.
Solución: ```java return squaredDiffs(a, b, 0); ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Problema 1 · 2010 · Problema 3 · 2010 ›