Lab 02 - Recursividad-1 MAMANI - MAMANI.renzo - junior-3C24E
Lab 02 - Recursividad-1 MAMANI - MAMANI.renzo - junior-3C24E
Lab 02 - Recursividad-1 MAMANI - MAMANI.renzo - junior-3C24E
LABORATORIO N° 02
Recursividad y Backtraking
Alumno(s) Nota
MAMANI.MAMANI.renzo.junior
Grupo E
Ciclo III
Fecha de entrega
I.- OBJETIVOS:
• Definir las reglas básicas a seguir para la construcción y la correcta interpretación de los Diagramas de
Flujo, resaltando las situaciones en que pueden, o deben, ser utilizados.
• Elaborar y Diseñar algoritmos con arreglos de una sola dimensión(unidimensional) denominada vectores
II.- SEGURIDAD:
Advertencia:
En este laboratorio está prohibida la manipulación del
hardware, conexiones eléctricas o de red; así como la
ingestión de alimentos o bebidas.
V.- RECURSOS:
• En este laboratorio cada alumno trabajará con un equipo con Windows 10.
VII.- PROCEDIMIENTO:
EJERCICIO DE APLICACIÓN
1. Recursividad : Factorial
# Factorial function
def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)
# Using
if __name__ == "__main__":
print(factorial(3))
a.- Graficar el tiempo que demora en ejecutarse una función factorial para los valores de:
1,2,4,8,16,32,64,128,256,512,1024
Laboratorio de Algoritmos y Estructuras de Datos
Página 2 de 6
TIEMPO DE EJECUCION
0.0045
0.004
0.0035
0.003
SEGUNDOS
0.0025
0.002
0.0015
0.001
0.0005
0
1 2 4 8 16 32 64 128 256 512 1024
VALORES
# Hanoi Function
def towersOfHanoi(numberOfDisks, src=1,
dest=3, tmp=2):
if numberOfDisks:
towersOfHanoi(numberOfDisks-1, src = src,
dest = tmp, tmp = dest)
#print("Move disk %d from peg %d to peg %d"
# % (numberOfDisks, src, dest))
towersOfHanoi(numberOfDisks-1, src = tmp,
dest = dest, tmp = src)
if __name__ == "__main__":
# Execute
towersOfHanoi(numberOfDisks=6)
El objetivo de este algoritmo consiste en tres torres con anillos ordenados de mayor a menor
tamaño, se deben pasar los anillos de la primera a la tercera torre y quedar en el mismo
orden. Los anillos siempre se deben ubicar de mayor a menor teniendo como base de la torre
el mayor anillo.
Designamos 3 parámetros:
- Número de discos (numberOfDisks)
- Origen (src), destino (dest)
- Una variable auxiliar (tmp).
Luego creamos un flujo “if” donde “numberOfDisks” es evaluado como True luego hace las
modificaciones en la función aplicada dentro de la misma función: numberOfDisks - 1, src =
src, dest = tmp, tmp = dest.
Laboratorio de Algoritmos y Estructuras de Datos
Página 4 de 6
Después la función aplicada dentro de la misma función vuelve a tomar otros valores:
numberOfDisks - 1, src = tmp, dest = dest, tmp = src
Finalmente el flujo llegará en un momento en el cual “numberOfDisks” tome 0, por lo tanto ya
no se ejecuta el flujo, para así obtener la mínima cantidad de movimientos posibles para cierto
número de discos.
3. Backtracking
# bitStrings Function
def bitStrings(n):
if n == 0: return []
if n == 1: return ["0", "1"]
return [ digit + bitstring
for digit in bitStrings(1)
for bitstring in bitStrings(n-1)]
if __name__ == "__main__":
# Excuting
print(bitStrings(3))
___________________________________________________________________________
________
print([x + y for x in [“0”,”1”]for yin [“0”,”1”]])
el resultado sería:
resultado:
2.
3.
4.
Laboratorio de Algoritmos y Estructuras de Datos
Página 6 de 6
CONCLUSIONES:
1. Se concluyo que el backtracking nos sirve para enumerar las
alternativas que existen para dar con la solución de un problema y dar
marcha atrás por si no se llega a esa solución para intentar otra alternativa
2. Se concluyó que la recursividad, es hacer que una función se llame a sí
misma repetidas veces hasta cumplir una cierta condición para evitar el
uso de bucles.
3. Se concluyó que el uso de backtracking y la recursividad, es esencial en
la programación para ahorrar recursos, espacio y tiempo al momento de
que se ejecute el programa.
4.se concluyo que en algunos ejercicios se pudo observar que pudimos
mejorar el código para que pueda ejecutar mas valores en menor tiempo
dándonos así mas posibilidades de hacer códigos mejores
5.se concluyo la que al aplicar estas funciones como seria recursividad y
backtracking se puede mantener un orden y ejecución más simple y rápida
y para ser un tema trabajado las primeras semanas me parece muy bueno
para aprender y así tener mas opciones para nuestros proyectos a futuro