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

Documentos relacionados