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 2021 (2021)
Enunciado
Se facilita la siguiente función recursiva desarrollada en lenguaje C:
#define MAX 42
int guess(int v[MAX], int p, int d)
{
int result;
assert(0 <= p && p < MAX && d > 0);
if (p == 0) {
if (v[0] % d == 0) result = 1; // (1)
else result = 0; // (2)
} else { // (3)
result = guess(v, p-1, d); // (4)
if (v[p] % d == 0) result++; // (5)
} // (6)
return result; // (7)
}
c.
Implementa una versión iterativa equivalente en lenguaje C y justifica por escrito el diseño adoptado.
int guess_iterative(int v[MAX], int p, int d)

Solución
Según los criterios oficiales de corrección
c. Implementa una versión iterativa equivalente en lenguaje C...
Solución: ```c { int result = 0; int i; assert(0 <= p && p < MAX && d > 0); for (i = 0; i <= p; i++) { if (v[i] % d == 0) { result++; } } return result; } ```
...y justifica por escrito el diseño adoptado.
Solución: Se sustituye la recursión descendente por un bucle determinista tipo for que recorre el array de 0 a p acumulando aciertos. Se ahorra la sobrecarga de la pila (O(1) frente a O(p)).
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.c · 2021 ›