Pregunta 2.a y 2.b · Prácticas de programación UOC 2021
Tema: Comprensión y traza de algoritmos recursivos · Del examen Examen de síntesis de Prácticas de programación (Convocatoria de enero 2021) (2021)
Enunciado
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
int guess(int x)
{
int result;
assert(x >= 0);
if (x == 0) // (1)
result = 1; // (2)
else // (3)
result = guess(x - 1) * x; // (4)
return result; // (5)
}
a.
[10%] ¿Qué efectos prácticos desencadenaría sobre el flujo de control reemplazar la instrucción indicada con la etiqueta (2) por la llamada result = guess(4); ?
b.
[10%] Especifica el significado matemático o funcional que desempeña el algoritmo guess. Asimismo, describe cronológicamente la cadena de llamadas y el cálculo intermedio que surge al ejecutar el siguiente fragmento:
int res;
res = guess(4);

Solución
Según los criterios oficiales de corrección
a. [10%] ¿Qué efectos prácticos desencadenaría sobre el flujo de control reemplazar la instrucción indicada con la etiqueta (2) por la llamada result = guess(4); ?
Solución: Bucle recursivo infinito / desbordamiento de la pila (stack overflow)
b. [10%] Especifica el significado matemático o funcional que desempeña el algoritmo guess .
Solución: Factorial / Factorial de un número ()
b. [10%] describe cronológicamente la cadena de llamadas y el cálculo intermedio que surge al ejecutar el siguiente fragmento: int res; res = guess(4);
Solución: Fase descendente: guess(4) -> guess(3)*4 -> guess(2)*3 -> guess(1)*2 -> guess(0)*1 -> guess(0) retorna 1. Fase ascendente: retornos sucesivos 1, 1*1=1, 1*2=2, 2*3=6, 6*4=24.
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 - Apartados a y b · 2023 · Pregunta 2.a y 2.b · 2021 ›