Problema 1 · Programació II UDL 2011
Tema: Recursión: diseño, traza y diagramas de llamadas · Del examen Examen Primer Parcial (Curso 2011/2012) (2011)
Enunciado
Dado el siguiente programa Java, elabore el diagrama con todas las llamadas que se ejecutan, indicando para cada una de ellas:
Nombre de la función ejecutada.
Variables locales y parámetros con sus valores correspondientes (utilice ? cuando se encuentren aún sin inicializar, e indique las actualizaciones tras cada asignación). En métodos del sistema como println, use param como nombre del parámetro.
Puntos de retorno señalando el número de línea.
Indique de forma explícita el texto final que se imprime en pantalla.
1 public class MisteryProgram extends ConsoleProgram {
2
3 public int isMisterious(int[] coefs, int initial, int pos) {
4 if (pos == coefs.length) {
5 return 0;
6 } else {
7 int value = isMisterious(coefs, initial, pos+1);
8 return coefs[pos] + initial * value;
9 }
10 }
11
12 public int isMisterious(int[] elems, int first) {
13 return isMisterious(elems, first, 0);
14 }
15
16 public void run() {
17 int[] poly = {4, 3, 2, 1};
18 int at = 5;
19 int eval = isMisterious(poly, at);
20 println("El resultado es " + eval);
21 }
22 }

Solución
Según los criterios oficiales de corrección
Dado el siguiente programa Java, elabore el diagrama con todas las llamadas que se ejecutan...
Solución: Diagrama de la pila de llamadas sucesivas: 1. `run()`: poly = {4,3,2,1}, at = 5, eval = ?. Llama a `isMisterious(poly, at)` en línea 19. 2. `isMisterious(elems, first)`: elems = poly, first = 5. Llama a `isMisterious(poly, 5, 0)` en línea 13. 3. `isMisterious(coefs, initial, pos=0)`: value = ?. Como 0 != 4, llama a pos=1 en línea 7. 4. `isMisterious(coefs, initial, pos=1)`: value = ?. Llama a pos=2 en línea 7. 5. `isMisterious(coefs, initial, pos=2)`: value = ?. Llama a pos=3 en línea 7. 6. `isMisterious(coefs, initial, pos=3)`: value = ?. Llama a pos=4 en línea 7. 7. `isMisterious(coefs, initial, pos=4)`: pos == coefs.length (4 == 4), retorna 0 a la línea 7 de la llamada anterior. Desenlace del desapilado: - Para pos=3: value = 0; retorna coefs[3] + 5 * 0 = 1 + 0 = 1 a línea 7. - Para pos=2: value = 1; retorna coefs[2] + 5 * 1 = 2 + 5 = 7 a línea 7. - Para pos=1: value = 7; retorna coefs[1] + 5 * 7 = 3 + 35 = 38 a línea 7. - Para pos=0: value = 38; retorna coefs[0] + 5 * 38 = 4 + 190 = 194 a línea 13. - Línea 13 retorna 194 a línea 19 de `run()`; eval = 194. - Llamada a `println(param="El resultado es 194")` en línea 20.
Indique de forma explícita el texto final que se imprime en pantalla.
Solución: El resultado es 194
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 3 · 2012 · Problema 2 · 2011 ›