Pregunta 2.c · Prácticas de programación UOC 2023
Tema: Transformación entre versión recursiva e iterativa en C · Del examen Examen de síntesis. Prácticas de programación (Enero 2023) (2023)
Enunciado
Pregunta 2 (50%). Análisis y desarrollo de método recursivo e iterativo
Se facilita el código siguiente escrito en lenguaje C correspondiente a una función denominada mystery. Cabe recordar que el operador de división / aplicado entre cantidades enteras calcula la división truncada (cociente entero):
void mystery (int x)
{
int res;
assert(x >= 0); // (1)
if (x >= 2) // (2)
res = 1 + mystery(x / 2); // (3)
else // (4)
res = 1; // (5)
return res; // (6)
} Nota: Aunque la firma original indica void, la rutina incluye sentencias return res; devolviendo un entero.
c)
[20%] Reescribe el algoritmo en C bajo un enfoque no recursivo (iterativo). Añade una explicación sintética del mecanismo empleado en tu versión.

Solución
Según los criterios oficiales de corrección
c. [20%] Reescribe el algoritmo en C bajo un enfoque no recursivo (iterativo).
Solución: ```c int mystery(int x) { int bitsCount; assert(x >= 0); bitsCount = 1; while (x >= 2) { bitsCount++; x /= 2; } return bitsCount; } ```
Añade una explicación sintética del mecanismo empleado en tu versión.
Solución: En lugar de encadenar llamadas recursivas que consuman memoria de pila, se parte del valor acumulado base (1) y, mediante una estructura repetitiva condicionada a x >= 2, se decrementa progresivamente el parámetro dividiéndolo entre 2 de forma entera a la par que se incrementa en uno el contador hasta agotar la condición.
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 - Transformación entre versión recur… · 2023 ›