1

IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

Embed Size (px)

Citation preview

Page 1: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

1

 

      Recursividad  

por Iván Cruz  

 La recursividad es una metodología de programación compleja que al implementarse causa algunas dificultades, debido a que la estructura del programa se convierte en un ciclo. Por lo general en programación se utilizan estructuras de repetición (este tema se aborda en el módulo 3 de esta materia) para realizar tareas cíclicas como puede ser, calcular la sumatoria de un número finito de valores o calcular el factorial de un numero x, para lo cual se presenta a continuación la Figura 1.

Figura 1. Cálculo del factorial de un número determinado

Cuando se habla de una función recursiva, se hace referencia a que dicha función “ se llama a sí misma de manera directa o indirecta a través de otra”. (Deitel, 2004. P.151.)

Page 2: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

2

Varios lenguajes de programación soportan recursividad como C, C++, C#, LISP, entre otros, pero el lenguaje que la utiliza de manera natural debido a su metodología funcional para resolver problemas es LISP. A continuación se presentan los ejemplos de damas inglesas y la serie de Fibonacci en los cuales se puede visualizar de manera más profunda y clara la utilización de la recursividad para resolver problemas de forma computacional.

 

 

 

 

 

 

 

 

 

Ejemplo de recursividad en juego de Damas Inglesas. Un juego sumamente popular y practicado es el de las damas inglesas, el cual consiste en eliminar todas las fichas del adversario. En este juego puedes desaparecer más de una ficha rival a la vez. A continuación para poder visualizar donde aplica la recursividad en este juego observa la siguiente secuencia de imágenes por jugada realizada en la siguiente Figura 2.

Figura 2. Ejemplo de recursividad en las Damas inglesas. Apoyo: http://www.flickr.com/photos/87729638@N02/8029811293/in/photostream

Page 3: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

3

 

 

 

En los últimos 6 tableros es donde se inicia el proceso de recursión, que se describe a continuación. Cuando la ficha localizada en la posición 2f (se cambio a color verde para una mejor visualización) entra en acción, se dibujaron 2 flechas de color azul que indican la jugada más benéfica para las fichas rojas, en la que la ficha verde puede desaparecer 3 fichas negras en una sola jugada.

Después de esta breve introducción a la jugada, pasamos a describir el proceso computacional, en el cual se puede pensar que se ha programado una función llamada “devorar ()”, la cual es invocada cuando una ficha esta posición de eliminar una ficha rival, posteriormente al invocar esa función la ficha verde ha eliminado la primera ficha negra, después de esta acción la misma función “devorar ()” se invoca a sí misma para evaluar si existen las condiciones propicias para volver a repetir el proceso de eliminar una ficha rival, como se puede observar en el tablero, prevalece tal condición por lo tanto elimina la siguiente ficha rival, ahora en el antepenúltimo tablero de la figura se realiza el mismo proceso anterior de recursividad, por lo tanto también aparece como viable eliminar una tercera ficha rival y finalmente después de haber eliminado 3 fichas rivales, se vuelve a invocar a sí misma para evaluar las condiciones actuales, y en las cuales aparece que ha llegado al final del tablero en la posición 8d y por lo tanto ya no existen condiciones propicias para seguir de manera recursiva eliminando fichas rivales y este proceso por lo tanto ha llegado a su fin.

Para ejemplificar todo esto de manera algorítmica procedemos al siguiente razonamiento.

Figura 3. Ejemplo de recursividad en las Damas inglesas. Apoyo: http://www.flickr.com/photos/87729638@N02/8029805764/in/photostream/

Page 4: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

4

1.- Ficha en 2f 2.- ficha en 2f y ficha rival en 3e (¿Existen condiciones para invocar a la función devorar?) 3.- si, existen tales condiciones entonces 4.- invocamos a la función devorar y la ficha verde pasa a 4d 5.- ficha en 4d y ficha rival en 5c (¿Existen condiciones para invocar a la función devorar?) 6.- si, existen tales condiciones entonces 7.- invocamos a la función devorar y la ficha verde pasa a 6b 8.- ficha en 6b y ficha rival en 7c (¿Existen condiciones para invocar a la función devorar?) 9.- si, existen tales condiciones entonces 10.- invocamos a la función devorar y la ficha verde pasa a 8d 11.-ficha en 8d (¿Existen condiciones para invocar a la función devorar?) 12.- No, fin de la recursividad. De esta forma se puede ejemplificar de manera simplificada como utilizar la recursividad en un juego de damas inglesas. El siguiente ejemplo es sobre la famosa serie de Fibonacci que sigue a continuación. Ejemplo de recursividad en Serie de Fibonacci  La Serie de Fibonacci es una secuencia de números muy estudiada y utilizada para resolver distintos tipos de problemas en la actualidad. A continuación se presentan los primeros 10 números de esta serie:

1, 1, 2, 3, 5,8, 13, 21, 34, 55,……. Esta serie se puede describir de la siguiente manera, el número x viene formado por la suma de sus 2 antecesores, es decir

X i+1 = X i + X i−1 Ejemplificado 1 1 = 1 1+1 = 2 2+1 = 3 3+2 = 5 5+3 = 8 8+5 = 13 13+8= 21 21+13=34 34+21=55

Page 5: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

5

Esta serie de Fibonacci posee varias propiedades por demás interesantes, de las cuales sólo tomaremos una para mostrar su importancia. Si tomamos en cuenta la siguiente ecuación de dividir el número actual sobre el número anterior de la serie

X i

X i−1 Ejemplificando 2/1 = 1 3/2 = 1.5 5/3 = 1.66 8/5 = 1.60 13/8 = 1.625 21/13 = 1.615 34/21 = 1.619 55/34= 1.617

se puede observar que los resultados de esta división convergen hacia un número, mientras más divisiones de los números de la serie se realicen, se podrá confirmar que esta serie converge al número

1.618033989………….. (irracional) Este número es también conocido como el número áureo o número de la razón dorada, el cual esta dado por la siguiente ecuación

Esta ecuación es utilizada para resolver problemas de optimización por medio del método numérico conocido como método de la sección dorada, el cual basado en esta razón busca los puntos óptimos de la ecuación del problema. Una vista geométrica de esta seria de Fibonacci se puede observar en las siguientes secuencias de imágenes, las cuales muestran al final un espiral independientemente de la posición inicial de los cuadrados, estas, Figura 4 y Figura 5 son mostradas a continuación

Page 6: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Figura 4. Vista geométrica de la serie Fibonacci hacia la derecha

Figura 5. Vista geométrica de la serie Fibonacci hacia la izquierda

Page 7: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

7

En las imágenes anteriores podemos observar que se forma un espiral, cada cuadrado tiene como medida por lado, el número de la serie de Fibonacci, que le corresponde, de ahí la importancia de esta serie en las matemáticas.

Ahora después de la información previa se presentan las Figuras 5 y 6 con los códigos fuente en Lenguaje C utilizando el entorno de desarrollo Dev-C++ (consultar manual de instalación) que muestran la secuencia de los números de Fibonacci que el usuario indique, hay que tomar en cuenta que esta serie tiende a ser exponencial por lo cual solo pueden representarse

computacionalmente cierto número de valores. Los códigos muestran la serie de manera estructurada y de manera recursiva para tener un ejemplo práctico.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Figura 5. Código fuente en Lenguaje C de la serie de Fibonacci de forma estructurada. (Dev C++, 2005).

Page 8: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

8

 

 

 

 

 

Después de analizar ambos códigos fuente, se puede concluir que el razonamiento de abstracción en el caso de la recursividad es más claro y logra poner en evidencia un sólido razonamiento matemático para la resolución de problemas, la escritura del código recursivo siempre se caracteriza por tener una estructura matemática definida y fácil de entenderse, aunque su implementación suele ser compleja. El uso de la recursividad en la resolución de problemas computacionales no es muy recomendable, debido a que todas las llamadas de función que se realizan se almacenan dentro de una pila de datos, la cual puede llegar a desbordarse y terminar la ejecución del programa de manera abrupta e inesperada, pudiendo ocasionar graves problemas con el manejo de la información del usuario, o bien al no tener una condición que termine las llamadas recursivas el programa puede quedar atrapado en un ciclo infinito, lo cual también desbordaría la pila de datos y terminaría de la misma forma la ejecución del programa. Por lo general siempre es recomendable utilizar estructuras de repetición y no la recursividad, ya que la manipulación y manejo de errores en las estructuras de repetición es más fácil de realizar que en la recursividad, prácticamente todas los funciones que utilizan recursividad, pueden ser realizadas utilizando estructuras de repetición, además de que la recursividad es mucho más lenta de ejecutarse en tiempo computacional que las estructuras.

 Referencias   

Deitel, M. (2004). Cómo programar en C/C++ y Java (4ª. Edición) [Libro en línea]. Pearson Educación.

Recuperado el 29 de julio de 2010 de http://www.bibliotechnia.com/bibliotechnia20/index.php?option=com_libros&task=preview&id=1428&Itemid=5.

Recurso de la Biblioteca Digital de la UVEG.

Figura 5. Código fuente en Lenguaje C de la serie de Fibonacci de forma recursiva. (Dev C++, 2005).

Page 9: IF0010 M4AA1L5 Recursividad uveg okroa.uveg.edu.mx/repositorio/licenciatura/186/Recursividad.pdf · de valores o calcular el factorial de un numero x, ... ejemplos de damas inglesas

  I-MIP7001_M2AA2L1_Cédula Versión: Septiembre 2012 Revisor: En lista

 

 

©UVEG. Derechos reservados. Esta obra no puede ser reproducida, modificada, distribuida, ni transmitida, parcial o totalmente, mediante cualquier medio, método o sistema impreso, electrónico, magnético, incluyendo el fotocopiado, la fotografía, la grabación o un sistema de recuperación de la información, sin la autorización por escrito de la Universidad Virtual del Estado de Guanajuato.

9

Forouzan, A. (2003) Introducción a la ciencia de la computación (Trad. Lorena Peralta). México: Thompson.

Sedgewick, R. (2000). Algoritmos en C++ (1ª. Edición) [Libro en línea]. México: Addison Wesley Longman. Recuperado el 29 de julio de 2010 de http://www.bibliotechnia.com/bibliotechnia20/index.php?option=com_libros&task=preview&id=18&Itemid=5.

Recurso de la Biblioteca Digital de la UVEG.

Dev C++. (2005). Dev C++ (Ver. 5 (4.9.9.2)). Recuperado el 22 de marzo de 2012 de http://www.bloodshed.net/index.html Software utilizado bajo licencia GPL.