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 }

Enunciado: Problema 1 · Programació II UDL 2011

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 ›

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