Problema 3 · Programació II UDL 2012
Tema: Recursión: diseño, traza y diagramas de llamadas · Del examen Examen Primer Parcial Curso 2012-2013 (2012)
Enunciado
Problema 3. Copia recursiva de vector mediante prefijos
Diseñad e implementad un método recursivo que, dado un vector de enteros no nulo, cree y devuelva un nuevo vector idéntico (con idéntica dimensión y los mismos valores situados en idénticas posiciones).
public int[] copyVector(int[] source) {
// Implementación
}
Para evitar la sobrecarga de instanciar y replicar vectores en cada nivel de recursión, debéis apoyar la solución en una función auxiliar con parámetros adicionales que opere estructurándose sobre los prefijos de los vectores.
Nota: Se requiere justificar detalladamente el diseño inductivo o recursivo.

Solución
Según los criterios oficiales de corrección
1. Justificación formal del diseño inductivo o recursivo
Solución: Un prefijo de longitud abarca los elementos con índices de a . Para copiar eficientemente un vector de tamaño , reservamos previamente en la función principal un único array destino target de longitud y delegamos la copia en una función auxiliar parametrizada por la longitud del prefijo pendiente de copiar: - Caso base: Para un prefijo de longitud , no queda ningún elemento por transferir; la función no realiza ninguna acción. - Paso inductivo: Para copiar un prefijo de longitud (índices a ): 1. Se copia el elemento extremo de dicho prefijo: `target[k - 1] = source[k - 1]`. 2. Por hipótesis inductiva, la llamada recursiva reduce la tarea a copiar el prefijo restante de longitud (índices a ). Dado que decrece estrictamente en una unidad en cada invocación, se alcanza de forma segura el caso base .
2. Código de la solución
Solución: ```java public int[] copyVector(int[] source) { int[] target = new int[source.length]; copyPrefix(source, target, source.length); return target; } private void copyPrefix(int[] source, int[] target, int prefixLength) { if (prefixLength > 0) { target[prefixLength - 1] = source[prefixLength - 1]; copyPrefix(source, target, prefixLength - 1); } } ```
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 2 · 2012 · Problema 1 · 2011 ›