Respuesta
Transcripción
Respuesta
Recursión Concepto y aplicación Definición formal ● ● La recursión es una técnica de programación funcional para iterar. Su forma de iteración se logra con la llamada de una función dentro de ella misma. Recursos y objetivo ● ● Como un ciclo normal, una función recursiva debe contar con una condición de parada, con una llamada recursiva y con un cuerpo de acciones. El objetivo es ejecutar el cuerpo de acciones recursivamente hasta que la condición de parada sea cumplida. Flujo de la recursividad def Función(párametros): if condición_parada: return algo cuerpo_de_acciones Función(parámetros_cambiados) Flujo de la recursividad Parámetros Función CUERPO Ejemplo 1 ● Desarrolle la función factorial recursívamente – 5! = 1x2x3x4x5 Ejemplo 1 def Factorial(n): if n == 0: return 1 else: return Factorial(n 1) * n Ejemplo 2 ● Imprima todos los divisores de un número 'n' Ejemplo 2 def Divisores(n, c): if n % c == 0: print c if c == n: return else: Divisores(n, c+1) Ejercicio 1 ● Realice la sucesión Fibonacci Sucesión Fibonacci ● 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Sucesión Fibonacci ● ● ● Primer término = 0 Segundo término = 1 nésimo término = f(n 1) + f(n 2) Respuesta def Fibo(n): if n == 0: return 0 if n == 1: return 1 return Fibo(n – 1) + Fibo(n 2) Extensión def Fibonacci(n): print Fibo(n) if n == 0: return else: Fibonacci(n 1) Ejercicio 2 ● Diga si un número 'n' es primo o no Respuesta def Primo(n, c): if c == n: return true else: if n % c == 0: return false return Primo(n, c + 1) Ejercicio 3 ● Calcule e recursívamente 1 1 1 1 1 e=1 ... ∞! 1! 2! 3! 4! Respuesta def e(n): if n == 0: return 1.0 else: return e(n 1) + 1.0 / Factorial(n) Ejercicio 4 ● Halle el Máximo Común Divisor(MCD) de 2 números n1 y n2. Respuesta def MCD(n1, n1, c): if n1%c == 0 AND n2%c == 0: return c else: return MCD(n1, n2, c – 1) Respuesta def MCD1(n1, n2): if n1 > n2: return MCD(n1, n2, n2) else: return MCD(n1, n2, n1) Ejemplo 1 (Mundo) ● Rodee el mundo recursívamente Respuesta def MirarSinPared(): if hasWallInFront(): TURNLEFT() MirarSinPared() Respuesta def VueltaMundo(): MirarSinPared() MOVE() TURNRIGHT() VueltaMundo() Extensión(rodee el mundo sólo una vez) def VueltaMundo(): if not hasFood(): if getMouth() > 0: putFood() MirarSinPared() MOVE() TURNRIGHT() else: return VueltaMundo() Ejercicio 1 (Mundo) ● ● ● Sume 2 números de extensión desconocida representados por granos Cada fila representa un número Imprima el resultado bajo la sentencia print Ejercicio 1 (Mundo) Estado Inicial +43502 8763 Respuesta def ContarDigito(): if not hasFood(): return 0 else: eat() return 1 + ContarDigito() Respuesta def EscribirDigito(n): if n != 0: putFood() else: EscribirDigito(n 1) Respuesta def HallarNumero(c): d = ContarDigito() * 10**c if hasWallInFront(): return d else: MOVE() return d + HallarNumero(c + 1) Respuesta def Sumar(): MOVE() n1 = HallarNumero() # Hallo el primer número # Bajo la ardilla a la siguiente línea TURNLEFT() MOVE() TURNLEFT() # Devuelvo la ardilla while not hasWallInFront(): MOVE() # Volteo y pongo la ardilla en posición para leer el número TURNLEFT() TURNLEFT() MOVE() n2 = HallarNumero() # Hallo el segundo número s = n1 + n2 # Los sumo print s # Imprimo la suma