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.

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

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 ›

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