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.

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 ›