Vous êtes sur la page 1sur 12

Facultad de Ingeniera y Arquitectura

CURSO

Algoritmo y Estructura de Datos II

DOCENTE

ERCE

Seminario

Tema: Recursividad

Un ejemplo paradigmtico seria el del tringulo de Sierpinski en el que cada


triangulo est compuesto de otro ms pequeos, compuestos a su vez de la
misma estructura recursiva (de
Hecho en este caso se trata de una estructura fractal).
1. Definicin:
Consiste en la definicin de algo (una propiedad, una operacin, un procedimiento o una
funcin) en trminos de s mismo.

2. Algoritmos Recursivos
Un algoritmo se dice que es recursivo cuando tiene la capacidad de llamarse o invocarse
a s mismo o de llamar a otro algoritmo desde el cual se puede volver a invocar al primero.

Caractersticas:

El nmero de llamadas recursivas que se realizan es finito (es decir, en algn


momento DEBE finalizar la ejecucin del algoritmo).

Cada llamada recursiva resuelve un problema de menor tamao, uno tras otro,
hasta llegar a un problema cuya resolucin sea directa o conocida.

Tcnica aplicada:
La tcnica que se aplica para definir la solucin recursiva de problemas se conoce como
divide y vencers y se trata de resolver un problema mediante su descomposicin en
varios subproblemas similares al original (o del mismo tipo) pero con datos ms
pequeos.

Si un problema puede subdividirse en subproblemas similares, entonces el mismo


proceso puede ser aplicado a cada uno de los subproblemas hasta que se pueda
encontrar una solucin directa o conocida. Finalmente se combinan las soluciones
de los subproblemas para producir la solucin final del problema original.

3. Anlisis de los algoritmos y programas:


Los programas recursivos tendrn casi siempre la siguiente estructura:

Avance
Condicin de parada
Procesamiento

La organizacin de un programa de funcin recursiva sera:

func1()
{

func1();

Ejm.: Analiza los siguientes casos:


a) Deducir la definicin recursiva del producto de nmeros naturales:

solucin iterativa
a x b = a + a + a + a+ . a
b veces

solucin recursiva
axb=a

si:

b=1

a x b = a x (b-1)+a

si:

b>1

Ejm.:

Multiplicar 8 x 3 de forma recursiva.


Solucin:

8 x 3= 8 x 2 + 8 = 8 x 1 + 8 + 8 = 8 + 8 + 8 = 24

Ejercicios:
Multiplicar los siguientes nmeros de forma recursiva:
a) 7 x 4
b) 10 x 8
c) 5 x 6
d) 2 x 7
e) 9 x 3
f) 12 x 5
b) Definir la naturaleza de la serie de Fibonacci: 0; 1 ; 1; 2; 3; 5; 8; 13; 21;

Qu observas?

0
1
2
3
5

Comienza desde 0.
Tiene la propiedad de que cada elementos es la suma de los dos elementos
anteriores, por ejm.:

+
+
+
+
+

1
1
1
2
3

=
=
=
=
=

1
2
3
5
8

Entonces se puede decir que:


fibonacci (0) = No definido
fibonacci (1) = No definido

La funcin recursiva ser:


fibonacci (n) = n para: cualquier valor
fibonacci (n) = fibonacci (n-1)+ fibonacci (n-2) para: cualquier valor

c) Ejemplo de funciones recursivas: El factorial de un nmero.

Funcin recursiva aplicada al factorial de un nmero entero no negativo


int factorial(int n) //definicin de la funcin
{
if(n<=1) //caso base
return 1;

Implementacin:

#include <iostream>
using namespace std;
float factorial (int n) //
{
if (n==0)
return 1;
else
{

float resultado = n* factorial(n-1);


return resultado;
}
}
int main ()
{
cout<< "Introduzca un numero:";
int n;
cin>> n;
cout<<n <<"! =" <<factorial(n)<< "\n";
system("PAUSE");
}
d) Estudio de las Torres de Hanoi

SOLUCIN:

Investigue, pruebe y complete los comentarios, luego escriba la salida del siguiente
programa recursivo basado en las torres de Hanoi.

#include <iostream>
using namespace std;
int main (void)
{
void hanoi (int n, int inic, int tmp, int final);
int n;
// Numero de .
cout << "Numero de discos: ";
cin >> n;
hanoi (n, 1, 2, 3); // mover ..
// usando el 2 .
system("pause");
return 0;
}
void hanoi (int n, int inic, int tmp, int final)
{
if (n > 0) {
// Mover
// El temporal
hanoi (n-1, inic, final, tmp);

// Mover el que queda en ...


cout <<"Del poste "<<inic<<" al "<<final<<"\n";
// Mover n-1 discos .
// El temporal es ..
hanoi (n-1, tmp, inic, final);
}
}
Responde a las preguntas y retos.
Actividad productiva individual

Para mayor informacin visita:


Animacin: Torres de Hanoi
http://www.juntadeandalucia.es/averroes/iesarroyo/matematicas/taller/juegos/torrehano
i/torrehanoi.swf

Un poco de historia:
Segn una leyenda india, en el Templo de Benars, bajo el domo que marca el
centro del mundo, hay una placa de latn con tres agujas de diamante. Durante la
creacin, Dios puso sesenta y cuatro discos de oro puro de distinto tamao en una
de las agujas, formando una torre. Los bramanes llevan generaciones cambiando
de lugar, uno a uno, los discos de la torre entre las tres agujas de forma que en
ningn momento un disco mayor descanse sobre otro ms pequeo. Cuando
hayan conseguido trasladar todos los discos a otra aguja su trabajo estar

terminado, y la torre y el templo se derrumbarn, y con un gran trueno, el mundo


se desvanecer.

Las torres de hanoi es un rompecabezas inventado en 1883 por el matemtico duard


Lucas. La leyenda citada arriba no fue ms que un invento publicitario del mismo creador
con el que llamar la atencin de la gente.
Consiste en un conjunto de 8 discos (en realidad puede variar desde 1 hasta n discos) de
radio creciente que se apilan en una (la primera) de las tres torres del juego. El objetivo es
conseguir trasladar toda la pila de discos de la torre inicial hacia una de las otras dos
torres (generalmente a la ltima) teniendo en cuenta las siguientes restricciones:
1.

Solo se puede mover un disco cada vez.

2.

Un disco de mayor tamao no puede colocarse sobre otro de menor tamao.

3.

Solo puedes mover el disco que se encuentre en la cima de una de las torres.

Para saber el minimo numero de movimientos en el que se puede resolver el


rompecabezas se sabe mediante:

Con n = 8 (mximo nmero de discos que el simulador representa por temas de espacio
en la pantalla) el mnimo nmero de movimientos es de 255. Este nmero crece de forma
exponencial cuantos ms discos aadas, es por eso que la leyenda citada arriba (con n =
64) implicara un numero de movimientos igual a 18.446.744.073.709.551.615 lo que
hara que suponiendo que se moviera un disco por segundo, se tardaran quinientos
ochenta mil millones de aos en finalizar el rompecabezas.

Otros videos sugeridos:

http://www.youtube.com/watch?v=5_6nsViVM00

Vous aimerez peut-être aussi