Académique Documents
Professionnel Documents
Culture Documents
CURSO
DOCENTE
ERCE
Seminario
Tema: Recursividad
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:
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.
Avance
Condicin de parada
Procesamiento
func1()
{
func1();
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.:
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
Implementacin:
#include <iostream>
using namespace std;
float factorial (int n) //
{
if (n==0)
return 1;
else
{
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);
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
2.
3.
Solo puedes mover el disco que se encuentre en la cima de una de las torres.
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.
http://www.youtube.com/watch?v=5_6nsViVM00