Problema 3 · Programació II UDL 2011
Tema: Recursión: diseño, traza y diagramas de llamadas · Del examen Examen Primer Parcial (Curso 2011/2012) (2011)
Enunciado
Problema 3. Comprobación recursiva de prefijo entre dos cadenas
Diseñe e implemente una función que determine si una primera cadena es prefijo de una segunda cadena. Por ejemplo:
"pata" es prefijo de "patata" (verdadero).
"pato" no es prefijo de "patata" (falso).
"pasota" no es prefijo de "paso" (falso).
"" es prefijo de "palote" (verdadero).
public boolean isPrefix(String prefix, String word) {
// ?
}
Pistas:
Para aplicar recursividad sin generar nuevos objetos de cadena en cada iteración, emplee una función auxiliar con un parámetro adicional que señale el índice actual que se compara.
Puede acceder a las posiciones con str.charAt(i).
Nota: Justifique adecuadamente el diseño recursivo (casos base y avance inductivo).

Solución
Según los criterios oficiales de corrección
Justifique adecuadamente el diseño recursivo (casos base y avance inductivo).
Solución: Para evitar llamadas ineficientes a substring, se utiliza inmersión pasando un índice idx que recorre las cadenas de izquierda a derecha comenzando en 0. - Caso base 1: Si idx == prefix.length(), se han comprobado todos los caracteres del prefijo con éxito, por lo que es prefijo (retorna true). Cubre también el caso en que el prefijo sea la cadena vacía. - Caso base 2: Si idx == word.length() (y el prefijo aún no ha terminado), la palabra es más corta que el prefijo, por lo que no puede serlo (retorna false). - Caso base 3: Si prefix.charAt(idx) != word.charAt(idx), los caracteres difieren y no es prefijo (retorna false). - Paso recursivo: Si los caracteres coinciden, el resultado depende de los restantes: llamada recursiva con idx + 1.
Diseñe e implemente una función que determine si una primera cadena es prefijo de una segunda cadena.
Solución: ```java public boolean isPrefix(String prefix, String word) { return isPrefixAux(prefix, word, 0); } private boolean isPrefixAux(String prefix, String word, int idx) { if (idx == prefix.length()) { return true; } if (idx == word.length()) { return false; } if (prefix.charAt(idx) != word.charAt(idx)) { return false; } return isPrefixAux(prefix, word, idx + 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 · 2011 · Problema 1 · 2010 ›