Está en la página 1de 4

Definición de recursividad.

La recursividad es un pilar fundamental en el ámbito de la programación y las matemáticas.


Básicamente, implica que una función es capaz de invocarse a sí misma para resolver un
determinado problema. De manera más sencilla, una función se define en función de sí misma.

En el contexto de la programación, la recursividad es una técnica muy utilizada para resolver


problemas que pueden ser desglosados en casos más pequeños y similares al problema
original. La función recursiva se divide en múltiples llamadas más pequeñas hasta llegar a un
punto base, donde deja de invocarse a sí misma y comienza a devolver resultados. Estos
resultados se combinan a medida que las llamadas recursivas vuelven a la función original, lo
que finalmente resuelve el problema inicial.

Ejemplo 1: Posteriormente se muestra nuevamente el problema de la resolución del factorial,


pero pidiendo el valor que deseamos hallar por teclado.

#include <stdio.h>

main()

int n;

long int factorial (int n);

printf("Introducir la cantidad entera a la que le queremos hallar el factorial: ");

scanf("%d", &n);

printf("%d! = %d\n", n, factorial(n));

long int factorial (int n) /* Calcular el factorial */

if (n <= 1)

return(1);

else

return(n * factorial (n-1));

}
Cuando ejecutamos un programa recursivo, las llamadas recursivas no se ejecutan
inmediatamente. Lo que se hace es colocarlas en una pila hasta que la condición de término se
encuentra. Entonces se ejecutan las llamadas a la función en orden inverso a como se
generaron, como si se fueran sacando de la pila, por tanto el orden sería algo así:

1º n! = n* (n-1)!

2º (n-1)! = (n-1) * (n-2)!

3º (n-2)! = (n-2) * (n-3)!

........ ...............

Último 2! = 2 * 1!

Los valores reales se devolverán en orden inverso, es decir:

1º 1!=1

2º 2! = 2 * 1! = 2 * 1 = 2

3º 3! = 3 * 2! = 3 * 2 = 6

........ ...............

Último n! = n * (n-1)!= ....

La característica típica que comparten todas las funciones recursivas es que se ejecutan en un
orden inverso. Cada vez que se realiza una nueva llamada a la función, se crea un conjunto
distinto de variables locales. Estas variables locales tienen los mismos nombres que las
declaradas en la función, pero representan valores diferentes en cada ejecución. Estos
conjuntos de valores se almacenan en la pila y se utilizan cuando el proceso recursivo se
desenrolla, es decir, cuando las llamadas a la función se retiran de la pila y continúa su
ejecución.

El compilador utiliza una nueva área de la pila para almacenar las variables en cada llamada
recursiva, lo que ralentiza la ejecución de la función y puede llevar a problemas de
agotamiento de la memoria de la pila. Por lo tanto, si es posible, se recomienda calcular las
funciones recursivas de forma iterativa, ya que este enfoque suele ser más eficiente y evita los
problemas asociados con el uso intensivo de la pila.
Ejemplo 2: Mostramos a continuación la versión no recursiva del factorial.

int factiterativo (int n) {

int t, res;

res=1;

for (t=1; t<= n; t++)

res*=t;

return(res);

La versión no recursiva factiterativo() debe estar clara. Utiliza un bucle que empieza en 1 y
termina en n y que progresivamente multiplica cada número por el producto móvil.

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

Ejemplos básicos de funciones recursivas.

http://blog.espol.edu.ec/ccpg1001/funciones-recursivas/

Ventajas y desventajas de la recursión.

Ventajas:

 Aborda problemas complejos de manera más sencilla, clara y elegante.


 No requiere una secuencia de pasos exactos para resolver el problema.
 Permite considerar que el problema de menor tamaño ya está resuelto.
 La recursividad es especialmente eficiente para resolver problemas difíciles de manera
iterativa.
 Algunos problemas son más fáciles de implementar utilizando la recursividad.
 Facilita la comprobación y verificación de la corrección de la solución.

Desventajas:

 Ineficiencia en términos de rendimiento.


 Sobrecarga asociada con las llamadas a subalgoritmos.
 Una simple llamada puede desencadenar un gran número de llamadas recursivas. Por
ejemplo, Fact(n) puede generar n llamadas recursivas.
 La claridad del algoritmo puede no justificar la sobrecarga asociada.
 Los algoritmos recursivos pueden ser ineficientes.
 La necesidad de crear muchas variables puede provocar problemas de memoria.
 En general, las funciones recursivas requieren más tiempo para ejecutarse que las
iterativas.
 Debido a las llamadas constantes a métodos y la creación de variables dinámicas en la
pila, puede haber duplicación de variables.
Fuente: https://estructurasdedatosjimenez.wordpress.com/2020/10/30/ventajas-y-
desventajas-de-la-recursividad/

También podría gustarte