Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José...

13
Recursividad

Transcript of Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José...

Page 1: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

Recursividad

Page 2: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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..

Page 3: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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

Page 4: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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

Page 5: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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)

Page 6: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

Aplicación concreta

Función Factorial

Page 7: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

Ejercicio para interiorizarnos

Factorial: n! = n . (n-1)!

Page 8: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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)

Page 9: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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)

Page 10: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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 (*)

Page 11: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

Ejercicios

Page 12: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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.

Page 13: Recursividad · Piensa en Haskell . (Ejercicios de programación funcional con Haskell) José Alonso. Title: Recursividad Author: USER Created Date: 9/23/2018 6:40:58 PM ...

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