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) {

}

Enunciado: Problema 2 · Programació II UDL 2012

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 N=elems.length−posN = \text{elems.length} - \text{pos}. - Caso base: Cuando el sufijo está vacío, es decir, cuando pos≥elems.length\text{pos} \ge \text{elems.length} (o N=0N = 0), el número de ocurrencias de cualquier valor es trivialmente 00. - Paso recursivo: Para un sufijo no vacío (pos<elems.length\text{pos} < \text{elems.length}), el sufijo comprende el elemento actual `elems[pos]` seguido por el subsufijo que inicia en pos+1\text{pos} + 1. Por hipótesis de inducción, `timesInSuffix(elems, pos + 1, value)` computa correctamente las apariciones en un sufijo de longitud N−1N - 1. Así: - Si `elems[pos] == value`, el resultado es 1+timesInSuffix(elems,pos+1,value)1 + \text{timesInSuffix}(\text{elems}, \text{pos} + 1, \text{value}). - Si `elems[pos] != value`, el resultado es 0+timesInSuffix(elems,pos+1,value)0 + \text{timesInSuffix}(\text{elems}, \text{pos} + 1, \text{value}). 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 ›

Más ejercicios de Recursión: diseño, traza y diagramas de llamadas