Sunteți pe pagina 1din 11

Recursividad

Fundamentos de Programación
Recursividad
Índice Pág.

1.1. Recursividad en C++………………………….3

1.2. Diseño de funciones recursivas……………...4

1.3. Implementación de funciones recursivas…...5

1.4. Principios de la recursividad………………….6

1.5. Ventajas y desventajas de la recursividad….7

1.6. Ejemplos………………………………………..8

Recursos complementarios…………………………10

Bibliografía……………………………………………11

Recursividad 2
1.1. Recursividad en C++
La recursividad es una técnica de programación que permite que una función
pueda llamarse a sí misma desde la misma función. Se utiliza la recursividad
como una alternativa a la repetición o reiteración de estructuras de control (for,
do, while, etc.).

La recursividad es una herramienta poderosa e importante en la resolución de


problemas en programación. (Segovia, 2012)

Una solución recursiva es normalmente menos eficaz, es decir que no realiza o


cumple el trabajo adecuadamente en términos de tiempo de ejecución además
de la gran cantidad de recursos de memoria que consume, que una solución
iterativa común debido a las operaciones auxiliares que llevan consigo las
llamadas adicionales a las funciones, no obstante, estas funciones pueden ser
muy útiles simplificando código y haciéndolo incluso más fácil de interpretarlo.

En muchas ocasiones el uso de la recursión permite a los programadores


especificar las soluciones naturales, más lógicas, elegantes, sencillas, que
serían, en caso contrario difícil de resolver. (Segovia, 2012)

No todas las funciones que se establezcan pueden designarse a sí mismas, sino


que estas deben estar hechas específicamente para que puedan ser recursivas,
ya que si no lo están se producirán bucles infinitos, así mismo podrían hacer que
el programa termine de una forma inadecuada. También hay que tener en cuenta
que no todos los lenguajes de programación que existen nos permiten usar
funciones recursivas. C++ permite la recursividad.

Un ejemplo muy común para poder comprender el concepto de recursividad es


el calcular la factorial de un número para lo cual se debe calcular la factorial del
número anterior del que ya se tiene, siempre que este sea como mínimo el
número uno. En este caso la función que es utilizada es la función en la que se
encuentra en este momento, función que debe llamarse a sí misma para un
nuevo número que será menor en una unidad que el principal, para poder
ejecutarse en el nuevo número actual hasta que este número sea la unidad.

Recursividad 3
1.2. Diseño de funciones recursivas
Lo primero que hay que tener en cuenta al momento de implementar una
solución de un problema por medio de una función recursiva es el reconocimiento
del algoritmo recursivo, es decir, tenemos que identificar cual es el razonamiento
recursivo. Mas específicamente tenemos que tener en cuenta 3 aspectos
fundamentales: los casos base, casos generales y la solución en términos de
ellos.

1.2.1 Casos Base

Son aquellos casos del problema que se resuelven con una parte o segmento de
código que no usa recursividad.

Normalmente se relacionan a instancias del problema que son simples y fáciles


de implementar para los cuales no es necesario expresarlos con una la solución
en términos de un subproblema de la misma naturaleza, es decir, de forma
recursiva (Garrido, 2012).

Sin embargo, el número y forma de los casos base dependen netamente del
programador, y de su ingenio al identificar el mayor conjunto de casos en
términos de simplicidad y eficiencia.

Al momento de diseñar una función recursiva hay que tener en cuenta que
siempre debe existir por lo menos un caso base. Ya que las llamadas recursivas
para dar solución a un problema no pueden darse de forma indefinida, sino que
deben llegar a un caso en el que no se necesita expresar la solución como un
problema de menor dimensión, es decir, siempre tienen que existir casos base.

1.2.2 Casos Generales

Son aquellos casos en los que la solución se expresa de forma recursiva pero el
tamaño del problema es demasiado grande o complejo, es decir, es necesario
resolver el mismo problema, aunque para una entrada de menor tamaño. Es
justo aquí donde se aprovecha el potencial de la recursividad ya que un problema
que inicialmente puede ser complejo comúnmente se puede expresar como:

 Solución de uno o más problemas de la misma naturaleza, pero de menor


tamaño es decir subproblemas
 Una serie de pasos adicionales que junto con las soluciones a los
subproblemas construyen la solución al problema general

Recursividad 4
1.3. Implementación de funciones recursivas
Para la correcta implementación de este tipo de funciones hay que tener en
cuenta las siguientes recomendaciones.

Primeramente, se plantean las posibles consideraciones al momento de


especificar la cabecera de la función recursiva, es decir su sintaxis y semántica.
En este sentido, una regla básica a tener en cuenta es que la cabecera debe ser
válida tanto para llamar al problema original como a cada uno de sus
subproblemas.

En segundo lugar, el cuerpo de la función debe de implementar los casos base


y generales. Ambos están muy relacionados de manera que tenemos que tener
en cuenta como programamos los casos generales para poder definir los casos
base y al revés, aquí un ejemplo fácil y sencillo de una correcta implementación
de una función para resolver el factorial de un numero:

Recursividad 5
1.4. Principios de la recursividad
El buen uso de funciones recursivas está ligado a un conjunto reglas y normas
que se tiene que tener en cuenta para el buen uso de estas y evitar caer en
errores que pueden afectar nuestro código de una manera sintáctica ya que una
de las principales razones de usar recursividad es hacer el código más lógico y
elegante, a continuación, se listan algunos de los principales principios a tomar
en cuenta:

Las funciones recursivas son procedimientos que representan la forma más


sencilla de muchos algoritmos.

Una función es recursiva cuando durante una invocación a ella puede ser
llamada a ella misma.

La epistemología de la recursividad evita eludir su utilización cuando su


aplicación sea adecuado para un determinado problema.

El uso de la recursividad es propiamente conveniente en aquellos problemas que


pueden definirse de modo natural en términos de recursividad.

Recursividad 6
1.5. Ventajas y desventajas de la recursividad
Ventajas
 No es necesario delimitar una secuencia de pasos exacta para resolver
un problema.
 Ofrece soluciones sencillas, claras y elegantes.
 Soluciones simples a problemas complejos.

Desventajas
 Puede ser menos eficaz.
 Sobrecarga de los recursos de memoria ya que una simple llamada puede
generar un gran número de otras llamadas recursivas.
 El valor de la recursividad reside en el hecho de que este puede usarse
para la resolución de problemas sin fácil solución reiterativa.
 Es poco eficiente en relación de algunos algoritmos recursivos.

Recursividad 7
1.6. Ejemplos

Potencia de un numero

#include <iostream.h>
#include<conio.h>

float potencia(float base, int exp);


int main()
{
float base, exp;
float res;
cout << "Introduce la base de la potencia\n";
cin >> base;
cout << "Expontente:\n";
cin >> exp;
res=potencia(base,exp);
cout << "La potencia de " << base << " ^ " << exp << " es " << res;
getch();
return 1;
}

float potencia(float base, int exp)


{
float res;
if (exp == 0)
res=1.0;
else if (exp > 0)
{
res=base * potencia(base,exp - 1);
}
else if (exp < 0)
{
res= 1.0 / base *potencia(base,exp + 1);
}
return res;
}

Recursividad 8
Máximo Común Divisor

#include <iostream.h>
#include<conio.h>

int mcd (int m, int n)


{
if (m % n == 0)
{
return n;
}else
{
return (mcd(n, m % n));
}
}

int main()
{
int a,b,res;
cout<<"escriba dos numeros";
cin>>a>>b;
res=mcd(a,b);
cout<<res;
getch();
}

Recursividad 9
Recursos complementarios
Describa el material que permita ampliar y reforzar el contenido de
los subtemas.

Desarrollo de los recursos complementarios El tipo de letra escogido es


Arial, 12 puntos, normal, sangría primera línea de 0,5, interlineado
1,15, alineación izquierda, para el desarrollo de los contenidos.

Recursividad 10
Bibliografía

Garrido, A. (2012). Recursividad. España: Universidad de Granada.

Segovia, Y. (19 de 03 de 2012). Recursividad en C++. Obtenido de

http://recursividadenc.blogspot.com/2012/03/recursividad-en-c.html

Curso de C++ - Funciones V: Recursividad. (s. f.). Recuperado 11 de julio de

2019, de http://c.conclase.net/curso/?cap=024

Ejemplos de Recursividad - Código Informático. (s. f.). Recuperado 11 de julio

de 2019, de https://xcodigoinformatico.blogspot.com/2012/09/ejemplos-

de-recursividad.html

Fdez-Valdivia, Garrido y Gcia-Silvente. Estructuras de datos. Un enfoque


practico usando C. 1998.

Recursividad 11