Haga click para publicitar en Alipso.com
Buscando Secundarios  |  Universidades  |  Carreras  |  Test Orientación Vocacional  |  Medios  |  Profesores particulares  |  Institutos   | Campus
Material Monografias  |  Exámenes Secundarios  |  Exámenes Universitarios  |  Enlaces  |  Enviar material |
Diversión Postales  |  Humor  |  Descargas  |  Juegos Comunidad  Foros  | Institucional Publicite  |  En su sitio  | Contáctese
Cursos en Buenos Aires
 Cursos de Informática | Cursos de apoyo al CBC | Carreras y Cursos de Diseño, Comunicación, Arte y Fotografía

[Monografias, exámenes y sitios ]
Todas las palabras   Cualquier palabra   Frase Exacta
Página inicial Agregar a Favoritos  |  Nuevos Recursos

Imprimir apunte Recomendar a un amigo Recordarme el recurso Descargar como PDF

Más sobre este recurso:
Catalogado en base de datos como: Teoría y resumen sobre la recursión.: La recursión es un concepto muy utilizado en programación. Se basa en expresar el resultado de un problema como operaciones aplicadas sobre una instancia reducida del mismo problema, hasta que se llega a un caso donde el problema queda bien definido. Función parcial recursiva que calcula el factorial de un natural. Funciones Recursivas en Haskell. Pattern Matching. Reducción.
Agregado: 17 de JULIO de 2003 (Por Michel Mosse) | Palabras: 780 | Votar! | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Programación >

Recomendamos

Material educativo de Alipso relacionado con Teoria resumen sobre recursion
  • Poema del Cid: Analisis muy completo sobre el poema del Cid, desde todos los puntos en que se la puede analizar
  • Independencia de los Estados Unidos de América.: ...
  • Literatura: Trabajo sobre la leyenda de Tristan e Isolda.
  • Oscar Wilde´s point of view about love: Es un trabajo realizado en el idioma ingles donde muestra que la vida y obras de Oscar Wilde son controversiales. Todos sus escritos(cuentos, novela, poemas, obras de teatro, etc) hablan sobre diversos temas, pero el tema del amor siempre esta involucrado


  • Enlaces externos relacionados con Teoria resumen sobre recursion
  • La Organizacion y el Funcionamiento del Registro del Estado Civil en Venezuela
  • En torno a la verdad que pretende la filosofia primera (praxeologia) de Antonio Gonzalez: la verdad
  • Notas sobre el deficit fiscal en El Salvador


  • Recursión

     

    La recursión es un concepto muy utilizado en programación. Se basa en expresar el resultado de un problema como operaciones aplicadas sobre una instancia reducida del mismo problema, hasta que se llega a un caso donde el problema queda bien definido. Este concepto es el mismo que se utiliza al demostrar inductivamente un problema.

     

    A modo de ejemplo, veremos la función parcial recursiva que calcula el factorial de un natural.

     

    F: No -> N

     

          | 1               si x = 0

    F(x)= |

          | x * F(x-1)      si x > 0

     

    Se puede observar que para computar el resultado de F(x) (en caso que sea mayor que 0), es necesario calcular el resultado de F(x-1) y así sucesivamente hasta llegar al caso base (x = 0). Es necesario que estos casos estén definidos para asegurar que la recursión termine.

     

    No siempre el caso base de una función recursiva sucede cuando x=0, ni siempre se reduce el x en 1 en el paso recursivo. Lo que se debe garantizar es que para todo x perteneciente al dominio de la función, tras aplicar una cantidad finita de pasos recursivos, se alcanza al caso base.

     

    Otro ejemplo que utilizaremos para ilustrar la recursión, es con el calculo recursivo de la serie de fibonacci.

     

    F: No -> N

     

          | 1               si x < 2

    F(x)= |

          | F(x-1)+F(x-2)      si x >= 2

     

    Como podemos ver, en este ejemplo, el caso base puede ser necesario definirlo para más de un natural.

     

    Funciones Recursivas en Haskell

     

    Aplicaremos este concepto en el lenguaje funcional Haskell, el cual ya fue presentado en la clase anterior. La función Factorial se declararía y definiría en sintaxis de Gofer, de la siguiente manera:

     

    factorial :: Int -> Int

    factorial 0 = 1                           (1)

    factorial x = x * (factorial (x-1))            (2)

     

    A modo de ejemplo, haremos el seguimiento del calculo de ésta función aplicada al natural 3.

     

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

     

    Pattern Matching (coincidencia de patrón): identificar una sección del resultado parcial que se esta evaluando que satisface con alguna de las definiciones ya establecidas. Por ejemplo cuando se evalúa

     

    3 * (factorial 2)

     

    el interprete hace Pattern Matching de factorial 2 con la definición factorial x ya que en la declaración de esta función se especificó que el parámetro de la función factorial es de tipo Int.

     

    Reducción: Una vez que se hace el Pattern Matching, se reemplaza por lo que establece definición, instanciando las variables de la definición por los valores con los que fue invocada. En nuestro ejemplo:

     

    3 * (factorial 2)  => (reducción por factorial x con x=2) =>

    => 3 * (x * (factorial (x-1))) | x=2 => instancia x en 2 =>

    => 3 * (2 * (factorial (2-1)))

     

     

    Definiremos ahora la función fibonacci en Haskell.

     

    fibonacci :: Int -> Int

    fibonacci 0 = 1

    fibonacci 1 = 1

    fibonacci x = (fibobacci (x-1)) + (fibonacci (x-2))

     

     

    Problema

    Se dice que dos números naturales a y b son "amigos" si la suma de los divisores positivos de a menores que a es igual a la suma de los divisores positivos de b menores que b. Definamos una función en gofer que determine si dos números son amigos.

     

    amigos :: Int -> Int -> Bool

    amigos a b = (sdp a) == (sdp b)

     

    -- Esta función devuelve la suma de divisores positivos

    sdp :: Int -> Int

    sdp x = sdpAux 1 x

     

    sdpAux :: Int -> Int -> Int

    sdpAux n y | n==y = 0

               | n `divide` y = n + (sdpAux (n+1) y)

               | otherwise = sdpAux (n+1) y

     

    divide :: Int -> Int -> Bool

    divide a b = (b `mod` a) == 0

     

     





    Boletín de Novedades

    Usuarios ya reciben nuestro boletín informativo. Suscribase Ud. también gratis.

    Suscribir Desuscribir
      X