Está en la página 1de 12

Ensayo Argumentativo

(Matemáticas Discretas)

Por: Alvares Atencia Juan Carlos

Brango De Meza Aurys Patricia

Sarmiento Gary Luis Alberto

Jiménez Valdelamar Valeria

Mat: Carlos Espitia Triviño

Fundación Universitaria Tecnológico Comfenalco

Facultad de Ingeniería

Tecnología en Desarrollo de Software

Sección #1 / Semestre #5

Cartagena

2021
Índice

Introduccion……………………………………………………………………………………...3

Contenido…………………………………………………………………………………………4

Conclusion……………………………………………………………………………………....10

Bbibliografia………………………………………………………………………………….....11
Introducción

La recursividad más que nada se enfoca a que dicha función tiene varios ciclos repetitivos.

Mediante la realización del siguiente trabajo se encontrarán diferentes conceptos de recursividad,

sus funciones, ventajas y desventajas para poder adquirir más conocimientos sobre el tema,

comprender mejor cada concepto y relacionarla con la vida real. Esperando que este trabajo

contenga la información necesaria para aclarar cualquier dudad del lector, así como también de

las personas que lo realizan.


Definiciones Recursivas

Recursividad es un concepto qué se utiliza en programación para definir funciones que se

expresan con su misma definición por lo tanto vamos a decir que la recursividad consiste en

funciones que se llaman a sí mismas. básicamente una función recursiva no es más que una

función normal que dentro tiene una llamada a la misma función que está definiendo y esto es

muy útil ya que nos permite pensar en ciertos problemas de una forma muy sencilla, vamos a ver

primero el típico ejemplo de la factorial a pesar de ser un ejemplo súper común es muy útil para

entender cómo funciona una función recursiva.

Según la definición matemática de factorial para obtener la factorial de un número n se

multiplica n por cada número anterior a él que sea mayor que cero, por ejemplo, si queremos

saber la factorial de 5 hemos de multiplicar 5 * 4 * 3 * 2 * 1 en cambio si queremos la factorial

de 4 hemos de multiplicar 4 * 3 * 2 *1. 5! = 5 * 4 * 3 * 2 * 1

4! = 4*3*2*1

5! = 5 * 4!

Si nos fijamos la definición del factorial de 5 incluye dentro la definición del factorial de 4 por lo

que podríamos decir tranquilamente que el factorial de 5 es 5 multiplicado por el factorial de 4;

estamos definiendo el factorial de un número utilizando la propia definición de factorial, esto es

recursividad, si generalizamos está definición para que sirva para cualquier número podemos

definir qué el factorial de cualquier número n es n multiplicado por el factorial de n - 1 está

definición es una definición recursiva válida, pero si la intentamos utilizar a la práctica para

calcular el factorial de un número tendremos un problema.


El problema es que nuestra recurrencia no tiene final cuando lleguemos a calcular la factorial de

1 necesitaremos calcular la factorial de 0, y para calcular la factorial de 0 necesitaremos la

factorial de -1 y así hasta el infinito, a la práctica que vamos a crear un bucle infinito y todo

porque nos falta algo clave de cuando pensamos en algoritmos recursivos, el caso base.

El caso base es la condición de parada de nuestra recursión, es el punto donde paramos dónde

dejamos de llamar a la función y decimos hasta aquí hemos llegado, en el caso del factorial este

punto de parada sería el factorial de 0 si consideramos un caso donde definimos que el factorial

de 0 es 1 conseguimos determinar un final para la recursión, el factorial de 0 no depende de

ningún factorial de un número más pequeño que cero, es simplemente 1 así conseguimos

determinar un final para la recursión.

Si todos los números de una factorial dependieran de las factoriales anteriores siempre iriamos

hacia atrás, pero cuando llegamos a factorial de 0 cortamos ese camino, todo recurso necesita un

caso base, si queremos que pueda terminar al igual que la mayoría de bucles tenemos un punto

de finalización de la interacción vamos iterando hasta que llega al valor o hasta que se cumple

cierta condición, dicho esto el código que calcula la factorial de un número sería el siguiente:

Def factorial (n):

If n = 0:

return 1

else:

return n * factorial (n - 1)
Como podemos ver tenemos dos casos, uno define el caso base y otro define el caso recursivo de

esta forma se pueden expresar algoritmos de forma muy elegante, ya que con recursividad se

simplifica la forma de pensar en ellos, otro ejemplo muy concurrido es el de calcular la secuencia

de Fibonacci. Es un caso relativamente similar al del factorial, básicamente la secuencia de

Fibonacci es una secuencia donde cada valor de la secuencia se puede definir como la suma de

los dos números anteriores de esta; La secuencia empieza con 0 y con 1 y a partir del tercer

número es donde se empieza a aplicar la fórmula, el tercer número es 0 + 1 es decir, sumamos

los dos anteriores, el cuarto número es 1 + 1, el siguiente es 1 + 2 y así sucesivamente hasta el

infinito.

Fibonacci (N) = Fibonacci (N-1) + Fibonacci (N-2)

0 1 1 2 3 5 8 13 21 34

Como vemos podemos definir el caso recursivo de Fibonacci como la suma de los dos Fibonacci

anteriores y los casos base serían los dos primeros elementos, el número 0 y el número 1. En esta

situación son los dos primeros porque necesitamos mínimo dos elementos para poder calcular el

primer número de esa recursión; Dependemos de la suma de los dos anteriores por lo tanto el

programa que calcula el número i-ésimo de la secuencia de Fibonacci de puede expresar con esta

función recursiva:

Def Fibonacci (n):

If n <= 1:

Return n

Else:
Return(Fibonacci (n) + Fibonacci (n - 2) )

La recursividad es una herramienta que nos permite aplicar una metodología a la hora de crear

algoritmos, qué es la de expresar los problemas en problemas más pequeños, al final puede ser

un problema grande que es un conjunto de problemas pequeños que son cada vez más simples

hasta obviamente llegar al caso base, de esta forma conseguirás definiciones recursivas de un

algoritmo, definiciones recursivas para solucionar algún problema.

Algo que me gustaría nombrar es que, en el paradigma funcional, digamos los lenguajes que son

puramente funcionales la recursividad está presente en muchas ocasiones ya que básicamente no

puedes iterar, por lo tanto, se utiliza la recursividad como sustitución a los clásicos bucles y

además hay problemas muy clásicos de recursividad. La recursividad tiene mucho potencial

simplifica mucho la forma de pensar sobre muchos problemas, pero tiene algunas cosas de las

que es difícil que no son tan buenas, por ejemplo, el nivel de optimización, utilizar recursividad

acostumbra ser ligeramente más lento en lenguajes procedurales.

Las llamadas a funciones acostumbran hacer más difíciles de utilizar las variables en un bucle,

por lo que esa legibilidad al usar algoritmo recursivo se pierde un poco en optimización y

rapidez, además en el caso hipotético que se hagan muchísimas llamadas recursivas el algoritmo

puede provocar un desbordamiento de pila, básicamente causado por las múltiples llamadas que

se van acumulando y puede ser impracticable aplicar soluciones a problemas grandes.

Otro problema que puedes encontrar es que sale con algo de Fibonacci, por ejemplo, se pueden

llegar a repetir cálculos en el caso de calcular el cuarto número, decimos llamando a calcular los

números segundo y tercero de Fibonacci básicamente su definición recursiva.


Nos fijamos que al Llamar al tercero este a su vez va a llamar al segundo de nuevo, hemos

llamado al segundo ya dos veces, es decir estamos calculando múltiples veces algunos números

de Fibonacci cosa que realmente sería innecesaria y existen técnicas para solucionar estos

problemas como la memorización o traducción del algoritmo recursivo a uno iterativo para evitar

estas repeticiones.

Por otro lado, la función de Ackermann empieza a raíz de 1998 en dónde Wilhelm Ackermann

Considero una función doblemente recursiva está por m, n, p de tres variables. En la notación de

Conwy Ackermann demostró que se trata de una función recursiva que no es primitiva recursiva

esa definición fue simplificada por Rosa Peter y Rafael Robinson a la versión de dos variables.

Rosa Peters también demostró que la doble recursión no se puede reducir a recursión primitiva y

que De igual forma la triple recursión no se puede reducir a recursión primitiva y doble

recursión. Debido a su definición profundamente recursiva, la función de Ackermann se utiliza

con frecuencia para comparar compiladores en cuanto a su habilidad para optimizar la recursión;

Sin embargo, hay más problemas que se pueden beneficiar de la recursividad y unos de esos es el

de las Torres de Hanoi

Históricamente la leyenda cuenta que en un templo indio un rey mandó a instalar 64 discos de

oro y les dio unas instrucciones a los monjes para que manipularan los discos, la leyenda cuenta

que cuando el último disco fuese colocado en la tercera torre el fin del mundo llegaría. En

esencia, en el problema de las Torres de Hanoi tenemos tres torres donde hay discos apilados. En

un momento inicial tenemos una torre con los discos apilados en forma de pirámide dónde cada

disco es más pequeño que el que tiene debajo, en este problema de lógica tenemos que pasar la

pirámide de la primera de las torres a la tercera recordando un par de reglas clave:


En primer lugar, que tiene que quedar otra pirámide, por lo que la torre final también debe estar

ordenada del disco mas pequeño al más grande, solo podemos mover un disco alavés y un disco

no puede descansar sobre otro que sea más pequeño que él.

Para resolverlo es muy sencillo si se quiere mover n discos de una pirámide a otra lo mejor que

se puede hacer es mover en uno o varios pasos los primeros n - 1 disco en la torre de medio qué

es la torre auxiliar, después mover el disco de abajo a la tercera torre y después otra vez en uno o

varios pasos mover los discos que tenemos en la torre de medio a la torre final.

Para saber cuántos pasos deben correr como mínimo para desplazar los discos podemos utilizar

un modelo inductivo:

Para mover un disco vamos a necesitar 1 paso, para mover dos discos vamos a necesitar mover la

sub torre de 1 disco: 1 paso, mover el disco de abajo: 1 paso y mover la sub torre de 1 disco: 1

paso; en total son 3 pasos. Para mover tres discos vamos a necesitar mover la sub torre de 2

discos: 3 pasos, mover el disco de abajo: 1 paso y mover la sub torre de 2 discos: 3 pasos; en

total son 7 pasos. Para mover cuatro discos vamos a necesitar mover la sub torre de 3 discos: 7

pasos, mover el disco de abajo: 1 paso y mover la sub torre de 3 discos: 7 pasos; en total son 15

pasos.

Dado esto podemos inducir que el número de pasos para mover n discos es siempre P(n) =2^n-1,

con este trabajo logramos entender que la recursividad no es más que una herramienta como

cualquier otra con sus pros y contras y que lo importante es entender cómo podemos

aprovecharla al máximo para solucionar problemas que nos encontremos en el camino.


Conclusión

La recursividad es un concepto fundamental en matemáticas y en computación. Es una

alternativa diferente para implementar estructuras de repetición.

Se puede usar en toda situación en la cual la solución pueda ser expresada como una secuencia

de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas además como

se pudo notar la recursividad también se puede trabajar mediante pilas, así como también se

mencionó algunos algoritmos para utilizar la recursividad el cual se utilizó la de calcular un

numero factorial es un ejemplo más común que se encontró. Esperando que el trabajo contenga

la información necesaria para así cumplir con las características que se van a calificar.
Bibliografía

Aznar, E. R. (05 de Octubre de 2021). Dpto. Algebra. Obtenido de

https://www.ugr.es/~eaznar/funcion_ackermann.htm

Briano, F. (23 de Enero de 2008). Picando Codigo. Obtenido de

http://picandocodigo.net/2008/recursividad-en-programacion/

Delphin, J. (2014). Recursividad. Provincia de caratagena: Departamaneto de fisica y

matematica.

Mochon, S. (1997). La importancia de la recursividad en las matematicas a nivel elemental.

Mexico: Educacion Matematica.

Perez, J. G. (2001). Hanoi Towers. Madrid: Revista de comunicacion Vivat Academia. Obtenido

de Dialnet.

También podría gustarte