PDF de programación - Recursividad

Imágen de pdf Recursividad

Recursividadgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.820 visualizaciones desde el 14 de Enero del 2017
58,1 KB
6 paginas
Creado hace 20a (13/01/2004)
Recursividad

Una función que se llama a sí misma se denomina recursiva



Utilidad


Cuando la solución de un problema se puede expresar en términos de la
resolución de un problema de la misma naturaleza, aunque de menor
complejidad.


Sólo tenemos que conocer la solución no recursiva para algún caso
sencillo (denominado caso base) y hacer que la división de nuestro problema
acabe recurriendo a los casos base que hayamos definido.


Como en las demostraciones por inducción, podemos considerar que
“tenemos resuelto” el problema más simple para resolver el problema más
complejo (sin tener que definir la secuencia exacta de pasos necesarios para
resolver el problema).


Funcionamiento

- Se descompone el problema en problemas de menor complejidad (algunos de

ellos de la misma naturaleza que el problema original).


- Se resuelve el problema para, al menos, un caso base.

- Se compone la solución final a partir de las soluciones parciales que se van

obteniendo.



Diseño de algoritmos recursivos


1. Resolución de problema para los casos base:


o Sin emplear recursividad.

o Siempre debe existir algún caso base.



2. Solución para el caso general:


o Expresión de forma recursiva.

o Pueden incluirse pasos adicionales

(para combinar las soluciones parciales).



Siempre se debe avanzar hacia un caso base: Las llamadas recursivas simplifican
el problema y, en última instancia, los casos base nos sirven para obtener la
solución.


int factorial (int n)
{
int resultado;

if (n==0)
resultado = 1;
else
resultado = n*factorial(n-1);

return (resultado);
}

int potencia (int base, int exp)
{
if (exp==0)
return 1;
else
return base * potencia(base,exp-1);
}


// Caso base

// Caso general

// Caso general

// Caso base




Recursividad vs. iteración

Aspectos que hay que considerar al decidir cómo implementar la solución a un
problema (de forma iterativa o de forma recursiva):

- La carga computacional (tiempo de CPU y espacio en memoria) asociada a

las llamadas recursivas.


- La redundancia (algunas soluciones recursivas resuelven un problema en


- La complejidad de la solución (en ocasiones, la solución iterativa es muy

repetidas ocasiones).

difícil de encontrar).


- La concisión, legibilidad y elegancia del código resultante de la solución

recursiva del problema.



Ejemplo: Sucesión de Fibonacci



Solución recursiva

int fibonacci (int n)
{
if ((n == 0) || (n == 1))
return 1;
else
return fibonacci(n-1) + fibonacci(n-2);
}

Solución iterativa

int fibonacci (int n)
{
int actual, ant1, ant2;

ant1 = ant2 = 1;

if ((n == 0) || (n == 1)) {
actual = 1;
} else
for (i=2; i<=n; i++) {
actual = ant1 + ant2;
ant2 = ant1;
ant1 = actual;
}
}

return (actual);
}

Cálculo recursivo de fibonacci(5)



Ejemplo: Las torres de Hanoi



Mover n discos del poste 1 al poste 3 (utilizando el poste 2 como auxiliar):


hanoi (n, 1, 2, 3);



Solución recursiva:

void hanoi (int n, int inic, int tmp, int final)
{
if (n > 0) {

// Mover n-1 discos de "inic" a "tmp".
// El temporal es "final".

hanoi (n-1, inic, final, tmp);

// Mover el que queda en "inic" a "final"

printf (“Del poste %d al %d.\n”, inic, final);

// Mover n-1 discos de "tmp" a "final".
// El temporal es "inic".

hanoi (n-1, tmp, inic, final);
}
}


Solución para 3 discos


Según la leyenda, los monjes de un templo tenían que mover una pila de 64
discos sagrados de un sitio a otro. Sólo podían mover un disco al día y, en el
templo, sólo había otro sitio en el que podían dejarlos, siempre ordenados de



forma que los mayores quedasen en la base.



El día en que los monjes realizasen el último movimiento,

el final del mundo habría llegado…
  • Links de descarga
http://lwp-l.com/pdf786

Comentarios de: Recursividad (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad