CC 1002 Introduccin a la Programacin Recursin Nelson
- Slides: 25
CC 1002: Introducción a la Programación Recursión Nelson Baloian, José A. Pino
Factorial • El factorial de un número n se define como • n * (n – 1) * (n – 2) *. . . * 2 * 1 • Se puede definir recursivamente de la siguiente manera
Factorial en Python • El factorial de un número n se define como • n * (n – 1) * (n – 2) *. . . * 2 * 1 • Se puede definir recursivamente de la siguiente manera
Operación de Factorial recursivo f(4)=4*f(3)=3*f(2)=2*f(1)=1*f(0) ← f(0)=1 ← f(1)=1 * 1=1 ← f(2)=2 * 1=2 ← f(3)=3 * 2=6 f(4)=4* 6=24
Potencia (recursivamente) • Definición recursiva de potencia • Cálculo :
Potencia (recursivamente) • Caso base : • Caso recursivo :
En Python
Solución más eficiente • xy = x xy-1 si y es impar • xy = xy/2 si y es par def potencia(x, y): if y==0: return 1. 0 elif y%2==1: #impar? return x * potencia(x, y-1) else: aux=potencia(x, y/2) return aux*aux
Solución más eficiente 2 def potencia(x, y): if y==0: return 1. 0 aux=potencia(x, y/2) if y%2==0: return aux * aux else: return x * aux; • • Nota. Realiza log 2 y -1 llamadas recursivas (y no y-1) Ej: f(x, 17)-->f(x, 8)-->f(x, 4)-->f(x, 2)-->f(x, 1)-->f(x, 0) 5 llamadas (y no 16)
Los Números de Fibonacci • n Fn 0 0 1 1 2 1 3 2 4 3 5 5 6 8 7 13
Los Números de Fibonacci
Las torres de Hanoi • Puzzle que consiste en mover todos los discos de un pilar a otro, bajo ciertas restricciones. El juego consta de una tabla con tres pilares y n discos puestos en orden decreciente de tamaño en una de ellas. El objetivo del juego es mover todos los discos de un pilar a otro, de forma que al final se mantenga el mismo orden.
Las torres de Hanoi • Las reglas del juego son las siguientes: • Sólo 1 disco puede ser movido a la vez. • No puede haber un disco más grande encima de uno más pequeño. • Un movimiento consiste en mover un disco en la cima de una pila de discos hacia otra pila de discos puestos en otro pilar. • Nos interesa saber cuántos movimientos son necesarios para resolver el juego
Clave: inducción • Se trata de definir # hanoi int -> int # recibe el numero de discos en pilar izq. y responde # con la cantidad de movimientos necesarios para # llevarlos al pilar de mas a la derecha def hanoi(n) : . . . • Si tenemos un sólo disco basta moverlo del primer al último pilar • Supongamos que sabemos como calcular hanoi(n -1), ¿podemos escribir hanoi(n) en función de ella?
Clave: inducción • Primero necesitamos mover los n− 1 discos anteriores a otro pilar, lo cual nos toma hanoi(n-1) movimientos. • Luego, debemos mover el disco más grande del pilar al desocupado, esto nos toma 1 movimiento. • A continuación, debemos volver a mover los n − 1 discos restantes para queden encima del disco grande que acabamos de mover. Esto nuevamente nos toma hanoi(n-1) movimientos. • En total, necesitamos 2× hanoi(n-1) +1 movimientos para n discos
El programa en Python
Una función que no retorna valor Forma General de la instrucción if : if condicion : instrucción(es) else : intruccion(es)
Fractales Leer sección 6. 3 del apunte para otro ejemplo de recursión
Módulo turtle • Permite dibujar en la pantalla. • Tortuga dibuja una línea a medida que avanza en el plano. • Se puede girar la dirección de la tortuga, indicando los grados del ángulo. • Se puede modificar la velocidad de avance.
turtle. forward(n) # se mueve n pixeles turtle. left(g) turtle. right(g) # gira a la izquierda g grados # gira a la derecha g grados turtle. speed(r) # pone la rapidez de la tortuga turtle. done() # no hay más acciones que hacer
Receta de diseño para recursión (1) 1. Escribir ejemplos de uso de la función 2 potencia 0 es 1 2 potencia 4 es 16 2 potencia 3 es 8 2. Decidir cuál argumento va a ser recursivo En Potencia: el exponente 3. ¿Caso base? En Potencia: exponente 0
Receta de diseño para recursión (2) 4. Entender el paso recursivo, y cómo se descompone el problema Restar uno a la potencia; multiplicar 5. Poner nombre a cada componente de la solución “Base” y “potencia”
Receta de diseño para recursión (3) 6. Aplicar solución a un ejemplo i. 2 potencia 3 ii. Parámetros son 2 y 3; resultado es 8 iii. Los parámetros que son parte de la solución: 2 es la base, 3 es la potencia. iv. Respuesta para la llamada recursiva: la reducción consiste en reducir en 1 la potencia; llamada recursiva es 2 potencia 2 = 4 v. Combinación para respuesta final: resultado de 2 potencia 2 (4) se multiplica por base (2); resultado es 8. 7. Ocupar receta de diseño normal La función tiene un condicional: base y recursiva
Unos pocos problemas propuestos • • def suma(x, y) #x + (x+1) + … + y def permutaciones(x, y) #x!/(x-y)! def combinaciones(x, y) #x!/(y!(x-y)!) def inverso(x) #inverso(123) entrega 321
Para la clase del jueves Leer capítulo 7 del apunte!!
- Secuencia de instrucciones finitas
- Programacin
- Introducción de las enzimas
- Introduccin
- Introduccin
- Introduccin
- Introduccin
- Introduccin
- Kaon cp violation
- Tübitak 1002 ne kadar sürede sonuçlanır
- 1001 1002 1003 1004
- Tübitak 1004 bursiyer ücretleri
- Elif capítulo 1002
- The great plan of happiness
- Nelson education ltd
- Nelson medical practice
- Nelson biology 12 textbook
- Appetitve
- Nctuns simulator
- Jesper nelson
- Wexploit
- Hatano nelson
- Nelson mandela talents
- Nelson severino
- Nelson 1991
- Margit england