Está en la página 1de 2

Análisis y Diseño de Algoritmos

Práctica 3: algoritmos recursivos.

Objetivo:

Comparar el tiempo de ejecución y la complejidad de un algoritmo recursivo.

Introducción:

La recursividad es en técnica para dar solución a problemas grandes. La idea básica es, dado un problema,
resolver una parte más sencilla del mismo y con esta solución, resolver un problema más complicado; es
decir, ir resolviendo problemas de menor complejidad que puedan ser la solución de problemas de mayor
complejidad. Es importante mencionar que, la recursividad no es dividir un problema en tareas, más bien
se trata de reducir la complejidad del mismo y a partir de esto, resolver un problema más complicado. Por
ejemplo, consideremos el factorial de un número N (expresado como N!) el cual puede resolverse de la
siguiente forma:

for (j=2, i=1; j<=N; j++) i = i * j; /*El resultado está en i*/


Código 1.

Notemos que el problema lo podemos dividir en partes, por ejemplo:

for (j=2, i=1; j<=N/2; j++) i = i * j;


for (k=N/2, l=1; k<=N; k++) l = l * k;
i = i * l; /*Nuevamente el resultado está en i*/
Código 2.

Si comparamos el Código 1 con el 2, en el fondo tenemos el mismo problema, pero, al dividir el proceso
en dos ciclos, estos se podrían ejecutar de forma paralela y por lo tanto consumir menos tiempo. Sin
embargo, no todos los procesos pueden ejecutarse de manera paralela.

Pensemos ahora en otra forma de obtener una solución. El primer paso es determinar el conjunto de
posibles valores de entrada; en este caso, estamos pensando en que N ≥ 0. Conociendo la entrada, se
podrían explorar aquellos valores de entrada que pueden ser resueltos de forma sencilla, al conjunto de
datos de entrada, a cada valor de N en nuestro ejemplo, lo llamaremos caso. Por ejemplo, para el caso N
= 0 se tiene 0! = 1 (por definición), el siguiente caso 1! = 1, 2! = 2*1, 3! = 3*2*1 = 6, 4! = 4*3*2*1 = 24, etc.
Notamos que, es posible usar los resultados del caso previo para encontrar el resultado del siguiente caso,
por ejemplo, conociendo 3! se puede obtener 4!.

Para el problema del factorial, los casos más sencillos suceden para valores pequeños de N, en específico
cuando N = 0 o 1. Estos casos se denominan casos base y corresponden a la menor cantidad de operaciones
a realizar para dar solución. Entonces, si a partir del caso anterior, es posible obtener el resultado del
siguiente caso, entonces decimos que es posible resolver el problema de forma o manera recursiva. Si por
algún medio, conocemos el valor de (N-1)! entonces fácilmente podremos conocer el valor de N!, ya que
N! = N*(N-1!).

En ocasiones podría no ser evidente una solución mediante recursividad, pero en otras, podría ser muy
intuitivo. A nivel computacional, a cuando una solución recursiva sea muy intuitiva, no significa que la
mejor solución; podrían existir otras soluciones más eficientes pero tal vez más complejas de desarrollar.
Una implementación recursiva del factorial es la siguiente:

word Factorial (word n)


{ /*Suponemos que los datos de entrada son correctos*/
word R;
if ((n==0)||(n==1)) R = 1;
else R = n * Factorial (n – 1);
return (R); /*El resultado se regresa en R*/
}
Código 3.

En donde word representa un tipo de dato entero largo. Nótese en el código anterior, que se han separado
los casos base y, cuando no se trata del caso base, entonces “suponemos que”, conocemos el factorial del
siguiente caso para obtener el resultado del caso presente.

Desarrollo:

Realice las siguientes actividades:

1. Implemente los Códigos 1 y 2 y determine los tiempos de ejecución de ambos para valores de N
relativamente grandes, grafique los tiempos. Dado que el factorial de un número dado podría ser
muy grande, se recomienda que investigue algunos tipos de datos apropiados, por ejemplo, podría
experimentar con los tipos double, float o long long. Para pueda darse una idea, un tipo de dato
entero de 64 bits, solo permitiría obtener el factorial de 21, más allá de ese número, el resultado
no sería correcto.
2. Determine los tiempos de ejecución de cada código, grafíquelos y compárelos con el
comportamiento de los tiempos de ejecución de la actividad anterior. Note que, uno de los
tiempos es una función recursiva que tendrá que resolver.

Fecha de entrega: 05/10/2023 en la plataforma.

Entregable: Deberá entregar una documentación de no más de 5 cuartillas. No es necesario que entregue
una portada, con que en la parte superior coloque el número de práctica, su nombre y matricula será
suficiente. Las secciones del reporte que deberá entregar son:

a) Resumen. Descripción de la práctica y sus resultados. Un párrafo es suficiente.


b) Problema. Con sus propias palabras deberá describir el problema a resolver. Un par de párrafos
será suficiente.
c) Desarrollo y Resultados. Deberá describir el proceso de solución del problema y los resultados
obtenidos. Para el caso de programas no es necesario colocar código fuente, pero si explicar la
parte del algoritmo a diseñar y analizar. El código fuente se sube a parte y deberá hacer referencia
a él en su reporte.
d) Conclusiones. Aquella información relevante que considere importante producto del desarrollo o
análisis. Con un par de párrafos es suficiente.

Deberá subir a la plataforma su reporte en PDF y códigos fuente que se hayan generado, envíelos
comprimidos en ZIP. El nombre del reporte y del archivo comprimido DEBERA SER UNICAMENTE SU
NÚMERO DE MATRÍCULA.

También podría gustarte

  • Tarea 03
    Tarea 03
    Documento2 páginas
    Tarea 03
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • Reporte
    Reporte
    Documento7 páginas
    Reporte
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • P1ac 22P
    P1ac 22P
    Documento2 páginas
    P1ac 22P
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • Tarea1 1
    Tarea1 1
    Documento2 páginas
    Tarea1 1
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • Practica 1 Diego Reyes Blancas
    Practica 1 Diego Reyes Blancas
    Documento6 páginas
    Practica 1 Diego Reyes Blancas
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • Practica 4
    Practica 4
    Documento7 páginas
    Practica 4
    DIEGO REYES BLANCAS
    Aún no hay calificaciones
  • Objetivos
    Objetivos
    Documento3 páginas
    Objetivos
    DIEGO REYES BLANCAS
    Aún no hay calificaciones