Pregunta 2.a - Comprensión y traza de algoritmos… · Prácticas de programación UOC 2023
Tema: Comprensión y traza de algoritmos recursivos · Del examen Examen Prueba de síntesis enero 2023 (2023)
Enunciado
A partir del siguiente algoritmo codificado en C:
#define MAX 128
int mystery(int v[MAX], int x)
{
int res;
assert(x >= 0 && x < MAX);
if (x == 0) {
if ((v[0] % 2) != 0)
res = v[0];
else
res = 0;
} else {
if ((v[x] % 2) != 0)
res = v[x] + mystery(v, x - 1);
else
res = mystery(v, x - 1);
}
return res;
}
a)
[10%] Indica el propósito del método mystery. Detalla además la traza secuencial de llamadas y retornos con un diagrama de cajas al ejecutar:
int v[] = {23, 4, 7, 13};
mystery(v, 3);

Solución
Según los criterios oficiales de corrección
Indica el propósito del método mystery.
Solución: Calcula la suma de todos los números impares presentes en el vector v desde el índice 0 hasta el índice especificado por x.
Detalla además la traza secuencial de llamadas y retornos con un diagrama de cajas al ejecutar: int v[] = {23, 4, 7, 13}; mystery(v, 3);
Solución: • mystery({23, 4, 7, 13}, 3) invoca a mystery(..., 2) y suma 13 → res = 30 + 13 = 43 • mystery({23, 4, 7, 13}, 2) invoca a mystery(..., 1) y suma 7 → res = 23 + 7 = 30 • mystery({23, 4, 7, 13}, 1) invoca a mystery(..., 0) (4 es par, no suma) → res = 23 • mystery({23, 4, 7, 13}, 0) caso base (23 es impar) → retorna res = 23
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-b · 2023 · Pregunta 2.b - Punteros y gestión de memoria diná… · 2023 ›