Pregunta 2.a y 2.b · Prácticas de programación UOC 2021
Tema: Comprensión y traza de algoritmos recursivos · 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)
}
a.
Determina y explica qué modalidades o tipologías de recursividad exhibe este algoritmo.
b.
Explica el comportamiento semántico de la función guess (qué calcula). Detalla además la traza paso a paso empleando un diagrama o esquema de pila/cajas para la llamada:
int test;
test = guess({2, 6, 7, 9}, 3, 3);

Solución
Según los criterios oficiales de corrección
a. Determina y explica qué modalidades o tipologías de recursividad exhibe este algoritmo.
Solución: Recursividad simple o lineal, no final (no de cola / no terminal) y directa.
Valor final asignado a test en la llamada test = guess({2, 6, 7, 9}, 3, 3);
Solución: 2
b. Explica el comportamiento semántico de la función guess (qué calcula). Detalla además la traza paso a paso empleando un diagrama o esquema de pila/cajas para la llamada: test = guess({2, 6, 7, 9}, 3, 3);
Solución: Calcula cuántos elementos del vector v, desde el índice 0 hasta p inclusive, son divisibles entre d. Para la llamada indicada retorna 2.
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.a y 2.b · 2021 · Pregunta 2.a-b · 2021 ›