Está en la página 1de 4

.6) Recursividad.

En matemáticas se da el nombre de recursión a la técnica consistente en definir una función en


términos de sí misma. Puesto que en C una función puede llamar a otras funciones, se permite que
una función también pueda llamarse a sí misma.

Toda función definida recursivamente debe contener al menos una definición explícita para alguno
de sus argumentos. De no ser así la función puede caer en un bucle infinito.

Definición: Se llama recursividad a un proceso mediante el que una función se llama a sí misma de
forma repetida, hasta que se satisface alguna determinada condición. El proceso se utiliza para
computaciones repetidas en las que cada acción se determina mediante un resultado anterior. Se
pueden escribir de esta forma muchos problemas iterativos.

Se deben satisfacer dos condiciones para que se pueda resolver un problema recursivamente:

Primera: El problema se debe escribir en forma recursiva.

Segunda: La sentencia del problema debe incluir una condición de fin.

Mostramos a continuación un ejemplo típico de recursividad, hallar el factorial de un número. En


forma de traza con las sucesivas llamadas simuladas con ventanas.

Ejemplo 1: 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));
}
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.

CARACTERISTICA DE LOS CASOS

Caso Base: una solución simple para un caso particular. Podemos tener 1,2,3… N funciones en la cual
repetimos ciclos

Caso Recursivo: se iran ejecutando operaciones de tal manera que la ultima o la que esta mas cerca
al caso base, nos determinara que ha terminado esa función recursiva

Por si no les queda muy claro

Caso recursivo: una solución que involucra volver a utilizar la funcio irignal, con parámetros que se
acercan mas al caso base.

Los pasos que sigue el caso recursivo son los siguientes

1. El procedimiento se llama a si mismo


2. El problema se resuelve, tratando el mismo problema pero de tamaño menor
3. La manera en la cual el tamaño del problema disminuye asegura que el caso base
eventualmente se alcanzara

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


factorial, pero pidiendo el valor que deseamos hallar por teclado.
1 Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la
operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro.
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre
otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se
guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta
se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.
2

3 cola lineal La cola lineal es un tipo de almacenamiento creado por el usuario que trabaja

Bajo la técnica FIFO (primero en entrar primero en salir).


ALGORITMO DE INICIALIZACIÓN
F < -- 1
A <-- 0ALGORITMO PARA INSERTAR
Si A=máximo entonces
mensaje (overflow)
en caso contrario
A<-- A+1
cola[A]<-- valor

ALGORITMO PARA EXTRAER


Si A&ltF entonces

mensaje (underflow)
en caso contrario
F <-- F+1
x <-- cola[F]

Concepto: Las colas lineales tienen un grave problema, como las extracciones sólo pueden realizarse
por un extremo, puede llegar un momento en que el apuntador A sea igual al máximo número de
elementos en la cola, siendo que al frente de la misma existan lugares vacíos, y al insertar un nuevo
elemento nos mandará un error de overflow (cola llena).
ALGORITMO DE INICIALIZACIÓN
F < -- 0
A<-- 0

ALGORITMO PARA INSERTAR


Si (F+1=A) ó (F=1 y A=máximo) entonces
mensaje (overflow)
en caso contrario
inicio
si A=máximo entonces
A<--1
cola[A]<-- valor
en caso contrario
A <--A+1
cola[A]<-- valor
si F=0 entonces
F <-- 1
fin

ALGORITMO PARA EXTRAER


Si F=0 entonces
mensaje (underflow)
en caso contrario
x <-- cola[F]
si F=A entonces
F <-- 0
A<-- 0
en caso contrario
si F=máximo entonces
F <--1 en caso contrario F <-- F+1

También podría gustarte