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);

Enunciado: Pregunta 2.a y 2.b · Prácticas de programación UOC 2021

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 ›

Más ejercicios de Comprensión y traza de algoritmos recursivos