Está en la página 1de 16

Álgebra y lógica computacional

Recursividad

Emily Kohler, Tomas Handziak y Manuel Zielinski

Facultad de Ingeniería y Tecnología, Universidad Cuenca del Plata

Ingeniería en Sistemas de Información

Lic. José María Vega

14 de junio de 2022

1
Álgebra y lógica computacional

Índice
Objetivo..............................................................................................................................................3
Desarrollo..........................................................................................................................................4
Inducción...........................................................................................................................................4
Recursividad.....................................................................................................................................5
Creación de algoritmos recursivos............................................................................................6
Recursividad e Iteración...............................................................................................................6
Estructura de una función recursiva........................................................................................7
Funciones recursivas.....................................................................................................................8
Tipos de recursividad.....................................................................................................................9
Ejemplos de fórmulas recursivas para sucesiones geométricas y algebraícas.......12
Conclusiones...................................................................................................................................14
Bibliografía......................................................................................................................................15

2
Álgebra y lógica computacional

Objetivo:

Presentamos como objetivos en el propuesto trabajo; la explicación de las

estructuras que llevan a cabo la recursividad, sus repercusiones en aplicaciones de la vida

diaria y la semejanza en temas de desarrollo de software.

Señalaremos a profundidad en textos los siguientes contenidos:

a) Inducción, Recursividad y diseños de algoritmos.

b) Recursividad e iteración

c) Estructura de la Función Recursiva.

d) Funciones Recursivas.

e) Tipos de Recursividad.

f) Eficiencia de la Recursividad.

g) Ejemplos del Algebra y de la Geometría. Desarrollarlos

3
Álgebra y lógica computacional

Inducción

Se suele considerar el principio de inducción matemática como un axioma

que expresa una propiedad característica de los números naturales, hay que distinguir

claramente entre la inducción empírica, la cual se emplea en las ciencias naturales y cuya

validez se estab1ece experimentalmente, y la inducción matemática que representa un

procedimiento de carácter analítico, cuya va1idez se estableció por medio de un

razonamiento puramente lógico. Es decir, e1 principio de inducción matemática es una

verdad matemática “TEOREMA” .

La demostración de este teorema puede basarse en e1 principio del menor

entero positivo o de la buena ordenación de los enteros positivos que se expresa así:

Todo subconjunto S, no vacío, de los enteros positivos contiene un elemento menor que todos

los demás. Un elemento a es el mínimo del conjunto S si a satisface las dos condiciones:

1. a pertenece a él subconjunto S.

2. a ≤ x, para todo x en S.

Un ejemplo de este puede ser:


1 • 1/2 = 1/2
(1 • 1/2) (1. 1/3) = 1/3
(1. 1/2) (1 - 1/3) (1 • 1/4) = 1/4
Se puede establecer una ley general que rija estos productos: se observa que los resultados de
cada producto son fracciones de numerador 1 y el denominador es el mismo que aparece en el
último factor, entonces, que la proposición general tendrá la siguiente forma:
P(n): (1. 1/2) (1. 1/3) (1. 1/4) … (1. l/n) = 1/n

4
Álgebra y lógica computacional

Recursividad

Es una alternativa diferente para implementar estructuras de repetición

(ciclos). Los módulos se hacen llamar recursivas. 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 no ambiguas.

Las fórmulas recursivas pueden aplicarse a situaciones tales como prueba

de teoremas, solución de problemas combinatorios, algunos acertijos, etc.

Accesible de utilizar recursividad


 Para simplificar el código.
 Cuando la estructura de datos es recursiva ejemplo: árboles.
No accesible de utilizar recursividad
 Cuando los métodos usen arreglos largos.
 Cuando el método cambia de manera impredecible de campos.
 Cuando las iteraciones sean la mejor opción.
¿Por qué escribir programas recursivos?
Son más cercanos a la descripción matemática, generalmente más fáciles de analizar, se
adaptan mejor a las estructuras de datos recursivas y porque los algoritmos recursivos ofrecen
soluciones estructuradas, modulares y elegantemente simples.
Números de Fibonacci: definen una secuencia infinita: 1, 1, 2, 3, 5, 8, 13,
21, 34, 55, 89, 144, etc. En dónde un término n es la suma de los términos anteriores n-1 y n-
2 y los términos F (0) y F (1) tienen los valores 0 y 1 respectivamente.
La representación recursiva para obtener los números de Fibonacci es:
FN = FN-1 + FN-2 para N > 2
F0 = 0
F1 = 1
Ejemplo:
Fibonacci (5) es:
Fibonacci (5) = Fibonacci (4) + Fibonacci (3)

5
Álgebra y lógica computacional

Fibonacci (4) = Fibonacci (3) + Fibonacci (2)


Fibonacci (3) = Fibonacci (2) + Fibonacci (1)
Fibonacci (2) = Fibonacci (1) + Fibonacci (0)
Fibonacci (1) = 1
Fibonacci (0) = 0
Ventajas y Desventajas de la Recursividad
Ventajas: Algunos problemas son más sencillos de modelar e implementar utilizando
recursividad.
Desventajas: Es necesario la creación de varias variables lo que puede ocasionar problemas
en memoria. En general una función recursiva toma más tiempo en ejecutarse que una
iterativa.

Creación de algoritmos recursivos

Las claves para crear un algoritmo recursivo para resolver un problema son:
Cada llamada recurrente se debe definir sobre un problema menor.
Debe existir al menos un caso base para evitar recurrencia infinita.
Se debe analizar en qué momento se realizará la llamada recursiva. Ejemplo:
 El factorial de un numero n se define como n!
1*2*3*4*5*6*...*n
Considerar el caso cuando n=5
En este caso:
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 4!
De esta forma se tiene:
n! = n * (n-1)!
El caso base en el factorial por definición es:
0! = 1

6
Álgebra y lógica computacional

Recursividad e Iteración

Las operaciones tienen la posibilidad de ser manejadas por recursividad o

iteraciones. Recursividad es cuando usamos un procedimiento que se denomina a sí mismo,

directa o de forma indirecta. Una de las construcciones esenciales de programación son los

bucles, las cuales pertenecen a las construcciones de la mayor parte de los idiomas.

Comúnmente, el código con recursividad es más consistente que el código

con iteración. Solo hay una sentencia en el procedimiento de recursividad, y existe bastante

más de una sentencia en el procedimiento con iteraciones. Complementariamente, los bucles,

que tienen dentro numerosos bucles son complejos de leer y comprender. La recursividad es

más clara y fácil para dividir inconvenientes complejos en piezas manejables.

Pero, la utilización de la recursividad muestra algunas desventajas. Gracias

a que en la recursividad una utilidad se denomina a sí misma, implica tiempo y espacio: debe

usar mucha memoria de la pila de datos para trabajar los resultados. Entonces, la satisfacción

recursiva para calcular 1+2+...+n no es tan eficaz como la satisfacción iterativa.

El más grande inconveniente que muestra la recursividad es que causa un

error denominado: stack overflow, como se puede observar en la figura inferior. Al usar los

dos procedimientos, en mi máquina, al hacer el cálculo para n=12 000, el procedimiento que

usa iteraciones llevó a cabo el cálculo, en tanto que el procedimiento que usa recursividad

anunció el error: java.lang.StackOverflowError.

Creo que al final tendremos dos elecciones para solucionar un

inconveniente. Lo correcto es entender las virtudes y desventajas de cada uno y utilizar la

opción preferible.

7
Álgebra y lógica computacional

Funciones recursivas

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 casos base: Son aquellos que para su solución no requieren utilizar la función que se

está definiendo.

- Los casos recursivos: Son aquellos que sí que 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 casos base.

Una función es recursiva final cuando tras la llamada recursiva no hay que

realizar ningún cómputo adicional. Es decir, el valor devuelto en la llamada recursiva es igual

al valor que debe devolver la función.

Estructura de una función recursiva

8
Álgebra y lógica computacional

Ejemplo:

Resultado

f (1) 4

f (2) f (1) + 3,2 7,2

f (3) f (2) + 3,2 10,4

f (4) f (3) + 3,2 13,6

Tipos de recursividad

Como regla básica, para que un problema pueda resolverse utilizando

recursividad, el problema debe poder definirse recursivamente y, segundo, el problema debe

incluir una Metodología y tecnología de la programación I 4/11 condición de terminación

porque, en otro caso, la ejecución continuaría indefinidamente. Cuando la condición de

terminación es cierta la función no vuelve a llamarse a sí misma.

9
Álgebra y lógica computacional

Pueden distinguirse distintos tipos de llamadas recursivas dependiendo del

número de funciones involucradas y de cómo se genera el valor final. A continuación,

veremos cuáles son.

-Recursión lineal: en la recursión lineal cada llamada recursiva genera, como mucho, otra

llamada recursiva. Se pueden distinguir dos tipos de recursión lineal atendiendo a cómo se

genera resultado.

-Recursión lineal no final: en la recursión lineal no final el resultado de la llamada recursiva

se combina en una expresión para dar lugar al resultado de la función que llama. El ejemplo

típico de recursión lineal no final es cálculo del factorial de un número (n! = n * (n-1) * ...* 2

* 1). Dado que el factorial de un número n es igual al producto de n por el factorial de n-1, lo

más natural es efectuar una implementación recursiva de la función factorial.

Cada fila del anterior gráfico supone una instancia distinta de ejecución de

la función fact. Cada instancia tiene un conjunto diferente de variables locales.

10
Álgebra y lógica computacional

-Recursión lineal final: en la recursión lineal final el resultado que es devuelto es el resultado

de ejecución de la última llamada recursiva. Un ejemplo de este cálculo es el máximo común

divisor, que puede hallarse a partir de la fórmula:

Alguna llamada recursiva puede generar más de una llamada a la función.

Uno de los centros más típicos son los números de Fibonacci, números que reciben el nombre

del matemático italiano que los descubrió. Estos números se calculan mediante la fórmula:

Estos números poseen múltiples propiedades, algunas de las cuales todavía

siguen descubriéndose hoy en día, entre las cuales están:

 La razón (el cociente) entre un término y el inmediatamente anterior varía

continuamente, pero se estabiliza en un número irracional conocido como razón áurea

o número áureo, que es la solución positiva de la ecuación x2 -x-1=0, y se puede

aproximar por 1,618033989.

 Cualquier número natural se puede escribir mediante la suma de un número limitado

de términos de la sucesión de Fibonacci, cada uno de ellos distinto a los demás. Por

ejemplo, 17=13+3+1, 65=55+8+2.

11
Álgebra y lógica computacional

 Tan sólo un término de cada tres es par, uno de cada cuatro es múltiplo de 3, uno de

cada cinco es múltiplo de 5, etc. Esto se puede generalizar, de forma que la sucesión

de Fibonacci es periódica en las congruencias módulo m, para cualquier m.

 Si F(p) es un número primo, p también es primo, con una única excepción. F (4) =3; 3

es primo, pero 4 no lo es.

 La suma infinita de los términos de la sucesión F(n)/10n es exactamente 10/89.

-Recursión mutua: implica más de una función que se llaman mutuamente. Un ejemplo es el

determinar si un número es par o impar mediante dos funciones.

Ejemplos de fórmulas recursivas para sucesiones geométricas y

algebraicas

La sucesión geométrica a(n) está definida por la siguiente fórmula:

a (1) = -1 1/8

a (1) = 2 a (n-1)

¿Qué es a (4) el término de la sucesión?

Para calcular la factorial de un número se distinguen dos casos: si el número

es cero o si es mayor. El primer caso es un caso base, pues sabemos que la solución es 1,

12
Álgebra y lógica computacional

mientras que para el resto de los casos utilizaremos una llamada recursiva. La distinción de

casos puede realizarse por cualquiera de los 4 métodos que conocemos. Veámoslo por

ejemplo con el uso de patrones:

fact 0 = 1

fact n = n * fact (n-1)

Nótese que la recursión terminará para cualquier valor de entrada positivo,

pues en cada llamada recursiva el parámetro se va decrementando, hasta que en algún

momento llegue a valer 0. Nótese también que la recursión no es final, pues tras la llamada

recursiva es necesario multiplicar el valor obtenido por el parámetro de entrada.

La función anterior puede convertirse en final si se añade un parámetro

acumulador:

fact n = fact' n 1

fact' 0 acum = acum

fact' n acum = fact' (n-1) (n*acum)

La recursión es una estrategia muy potente cuando se utilizan listas.

Veamos por ejemplo cómo calcular la longitud de una lista:

long [] = 0

long (x:xs) = 1 + long xs

Nótese que la distinción de casos se hace en base a si la lista está vacía o

no. Sabemos que la definición termina porque en cada llamada recursiva se reduce en una

unidad la longitud de la lista, por lo que en algún momento llegará a estar vacía.

13
Álgebra y lógica computacional

Conclusión

En conclusión, la recursividad se implementa mediante una función que se

llama a sí misma de manera repetida hasta que se cumple la condición de finalización

establecida, momento en el que la función deja de llamarse a sí misma y continúa la

ejecución del programa en la instrucción siguiente a la última llamada recursiva.

En el ámbito informático la recursividad es una forma de repetir una serie

de instrucciones en un programa informático en la que la repetición se produce de manera

controlada porque se produce en función de una condición previamente establecida y se

detiene cuando dicha condición deja de cumplirse. Es una técnica de programación muy

poderosa que permite solucionar problemas de forma elegante y eficaz, aunque su uso exige

un buen dominio del lenguaje de programación y una correcta definición de la condición de

finalización, ya que de lo contrario se producirá un bucle infinito y el programa se bloqueará.

14
Álgebra y lógica computacional

Bibliografía

Grigori, A. (1968). El principio de inducción matemática. Boletín de Matemáticas, 2(1-2), 1–

Recuperado de:

https://revistas.unal.edu.co/index.php/bolma/article/view/34003

Inducción y Recursividad matematica discreta. (2021). Universidad Tecnológica Nacional.

StuDocu. Recuperado de:

https://www.studocu.com/es-ar/document/universidad-tecnologica-nacional/matematica-
discreta/induccion-y-recursividad-matematica-discreta/8772741

Rueda, S., & Castro, S. (n.d.). Recursividad Esencial en la Resolución de Problemas.

Universidad Nacional del Sur. Recuperado de:

http://sedici.unlp.edu.ar/bitstream/handle/10915/24231/Documento_completo.pdf?

sequence=1&isAllowed=y

Recursividad Análisis de algoritmos. (n.d.).

https://www.uv.mx/personal/ocastillo/files/2011/04/Recursividad.pdf

Recursividad. (2022). Ccia.ugr.es. Recuperado de:

https://ccia.ugr.es/~jfv/ed1/c/cdrom/cap6/cap66.htm

Badía, J., Martínez, B., Morales, A., & Sanchiz, J. (n.d.). Retrieved June 14, 2022, from

http://repositori.uji.es/xmlui/bitstream/handle/10234/119828/tema9.pdf?sequence=1

15
Álgebra y lógica computacional

16

También podría gustarte