Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
Recursividad
Introducción
A veces es difícil definir objetos explícitamente y, sin embargo, puede resultar sencillo definirlos en términos de ellos mismos.Este proceso se llama recursión..
Conceptode función recursiva
Una función recursiva es aquella que consigue la solución de un problema descomponiéndolo en una operación muy sencilla que se combina con la resolución del mismo problema a una escala menor y eso se repite sucesivamente hasta que la solución sea trivial.
FUNCION QUE EN SU DEFINICION SE INVOCA A SI MISMA
Retomemos dos
conceptos previos
dados en la clase
anterior.
Paso Base: Se especifica la función en su valor inicial.
Paso recursivo: Se proporciona una regla para obtener su valor en un entero a partir de sus valores en enteros más pequeños.
Esto se llama definición inductiva o recursiva
Ejemplo: una función suma que sea recursiva.
Suma (5) = 5 + 4 + 3 + 2 + 1 + 0 = 15
5 + Suma (4)
4 + Suma (3)
.
.
.
Suma (0) = 0
Fórmula general es: Suma n = n + Suma (n – 1)
Aplicación concreta
Función Factorial
Ejercicio para interiorizarnos
Factorial: n! = n . (n-1)!
Porqué la función Factorial es recursiva?
Factorial (4) = 4 * 3 * 2 * 1 = 24
4 * Factorial (3)
3 * Factorial (2)
.
.
.
Factorial (0) Paso Base:Factorial (0) = 1
Fórmula general es: Factorial (n) = n Factorial *(n – 1)
Funciones Recursivas en HaskellAplicaremos este concepto en el lenguaje funcional Haskell.- La función Factorial se declararía y definiría de la siguiente manera:
factorial :: Int -> Intfactorial 0 = 1 (1)factorial x = x * (factorial (x-1)) (2)
A modo de ejemplo, haremos el seguimiento del cálculo de ésta función aplicada al natural 3.
factorial :: Int -> Int
factorial 0 = 1 (1)
factorial x = x * (factorial (x-1)) (2)
Invocación: factorial 3=> 3 * (factorial (3-1)) reducción por definición 2 3 * (factorial 2) reducción por función (-) 3 * (2 * (factorial (2-1))) reducción por definición 2 3 * (2 * (factorial 1)) reducción por función (-) 3 * (2 * (1 * factorial (1-1))) reducción por definición 2 3 * (2 * (1 * factorial 0)) reducción por función (-) 3 * (2 * (1 * 1)) reducción por definición 1 3 * (2 * 1) reducción por función (*) 3 * 2 reducción por función (*) 6 reducción por función (*)
Ejercicios
Resumen
• Se dice que una función es recursiva cuando el cuerpo de la función utiliza a la propia función. Dentro de una función recursiva suelen distinguirse dos partes: - Los pasos base: Son aquellos que para su
solución no requieren utilizar la función que se está definiendo. - Los pasos recursivos: Son aquellos que sí
requieren utilizar la función que se está definiendo.
• Las definiciones recursivas funcionan siempre y cuando las llamadas recursivas se realicen de forma que en algún momento se lleguen a los pasos base.
Bibliografía.
“Matemáticas Discretas”, 5ta edición, Rosen.
https://menerey.weebly.com
Piensa en Haskell . (Ejercicios de programación funcional con Haskell)José Alonso