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

Post on 19-Aug-2020

9 views 0 download

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

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