Problema 2 · 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 2. Función recursiva para contar apariciones en sufijo
Diseñad e implementad un método recursivo que, a partir de:
un vector de números enteros (garantizado no nulo),
un entero que indica la posición inicial a partir de la cual se considera el sufijo del vector,
un valor entero a buscar,
calcule y retorne la cantidad total de apariciones de dicho valor en el sufijo especificado.
La signatura requerida es:
public int timesInSuffix(int[] elems, int pos, int value) {
// Implementación
}
Nota: Es imprescindible incluir la justificación formal o inductiva del diseño (definición de casos base y regla inductiva sobre el tamaño del sufijo).
public int timesInSuffix(int[] elems, int pos, int value) {
}

Solución
Según los criterios oficiales de corrección
Justificación formal o inductiva del diseño (definición de casos base y regla inductiva sobre el tamaño del sufijo)
Solución: El tamaño del problema viene determinado por la longitud del sufijo, dada por . - Caso base: Cuando el sufijo está vacío, es decir, cuando (o ), el número de ocurrencias de cualquier valor es trivialmente . - Paso recursivo: Para un sufijo no vacío (), el sufijo comprende el elemento actual `elems[pos]` seguido por el subsufijo que inicia en . Por hipótesis de inducción, `timesInSuffix(elems, pos + 1, value)` computa correctamente las apariciones en un sufijo de longitud . Así: - Si `elems[pos] == value`, el resultado es . - Si `elems[pos] != value`, el resultado es . En cada llamada, `pos` incrementa en 1, garantizando la convergencia hacia el caso base.
Implementación del método recursivo timesInSuffix
Solución: ```java if (pos >= elems.length) { return 0; } int count = (elems[pos] == value) ? 1 : 0; return count + timesInSuffix(elems, pos + 1, value); ``` ```java if (pos >= elems.length) { return 0; } if (elems[pos] == value) { return 1 + timesInSuffix(elems, pos + 1, value); } else { return timesInSuffix(elems, pos + 1, value); } ```
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 · 2012 · Problema 3 · 2012 ›