Pregunta 2.c · Prácticas de programación UOC 2021

Tema: Transformación entre versión recursiva e iterativa en C · Del examen Prueba de síntesis. Enero de 2021 (2021)

Enunciado

Se facilita la siguiente rutina recursiva escrita en lenguaje C:

#define MAX 42

int guess(int v[MAX], int a, int b)

{

int result;

assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b);

if (a == b) // (1)

result = v[b]; // (2)

else { // (3)

result = guess(v, a + 1, b); // (4)

if (result > v[a]) // (5)

result = v[a]; // (6)

} // (7)

return result; // (8)

}

[20%] c. Desarrolla una versión equivalente puramente iterativa en lenguaje C y razona el enfoque adoptado para la transformación.

Enunciado: Pregunta 2.c · Prácticas de programación UOC 2021

Solución

Según los criterios oficiales de corrección

c. [20%] Código en lenguaje C de la versión equivalente puramente iterativa

Solución: ```c #define MAX 42 int guess_iterativo(int v[MAX], int a, int b) { int resultado; assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b); resultado = v[b]; // Se inicializa el mínimo provisional con el último elemento while (a < b) { if (v[a] < resultado) { resultado = v[a]; } a++; } return resultado; } ```

c. [20%] Razonamiento del enfoque adoptado para la transformación

Solución: Se toma como cota mínima inicial el elemento situado en el extremo superior b. Mediante un bucle while, se barre el rango desde el índice inicial a hasta b - 1; si en alguna posición se halla un número estrictamente menor que el acumulado, se actualiza la variable. Al término de la iteración se retorna el menor elemento del intervalo.

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.

‹ Pregunta 2.c · 2021 · Pregunta 2.b · Juny 2020 ›

Más ejercicios de Transformación entre versión recursiva e iterativa en C