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)

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

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 ›

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