Recursividad

3,908 views
3,712 views

Published on

Desarrollo del concepto de recursividad, ejemplos en listas, arboels y grafos, fractales.-

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
3,908
On SlideShare
0
From Embeds
0
Number of Embeds
91
Actions
Shares
0
Downloads
116
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Recursividad

  1. 1. C.E.C.O N° 4 (Algoritmos y lenguajes)Recursividad<br />Integrantes:<br /><ul><li>Buslaiman, Emeli
  2. 2. Cortés, Cristian
  3. 3. Diaz, María Rosa
  4. 4. Oliva, Cristian
  5. 5. Páez, María Vanesa</li></li></ul><li>Definición<br /><ul><li>Es un concepto fundamental en matemáticas y en computación.
  6. 6. El proceso de resolver un problema reduciéndolo a uno o mas sub problemas.
  7. 7. Un proceso es recursivo si forma parte de si mismo.</li></li></ul><li>Tipos de Recursividad<br /><ul><li>Recursividad Directa.
  8. 8. Recursividad Indirecta.</li></li></ul><li>Algoritmo Recursivo<br />Es un algoritmo que expresa la solución de un problema en términos de una llamada a si mismo. <br />
  9. 9. Reglas para realizar un Algoritmo<br />Caso Base.<br />Progreso.<br />Credibilidad.<br />Interés compuesto.<br />
  10. 10. Ventajas e Inconvenientes<br /><ul><li>La principal ventaja es la simplicidad de compresión y su gran potencia.
  11. 11. El principal inconveniente es la ineficiencia tanto en tiempo como en memoria.</li></li></ul><li>Implementación<br /><ul><li>La recursividad es un método poderoso usado en inteligencia artificial.
  12. 12. Las fórmulas recursivas pueden aplicarse a situaciones Matemáticas, etc.
  13. 13. Existen ciertas estructuras cuya definición es recursiva.</li></li></ul><li>Recursión Vs Iteración<br />Tanto la iteración como la recursión se basan en estructuras de control<br /><ul><li>La iteración utiliza una estructura repetitiva.
  14. 14. La recursión una estructura de selección.</li></li></ul><li>Asignación de memoria<br />La memoria de un ordenador a la hora de ejecutar un programa queda dividida en dos partes:<br /><ul><li>La zona donde se almacena el código del programa
  15. 15. La zona donde se guardan los datos: pila (utilizada para llamadas recursivas).</li></li></ul><li><ul><li>Programa principal llama a una rutina “M”.
  16. 16. Se crea en la pila de un registro de activación o entorno “E”.
  17. 17. Almacena constantes, variables locales y parámetros formales.
  18. 18. Estos registros se van apilando conforme se llaman sucesivamente desde una función a otras.
  19. 19. Cuando finaliza la ejecución, se va liberando el espacio.</li></li></ul><li>Ejemplos de Recursividad<br /><ul><li>EL FACTORIAL !</li></ul>PARA RECORDAR<br />Se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n.<br />3!= 1 * 2 * 3<br />3!=6<br />
  20. 20. 4!=4* 3!<br />Ejemplo:<br />3!= 3*2!<br />2!= 2 *1!<br />1!= 1 *0!<br />//Solución no estructuradaint factorial (int n) {if (n==0) //Caso base return 1;else //Caso General return n*factorial(n-1);}<br />0!= 1<br />
  21. 21. 4!=4* 3!<br />4!=4* 3!<br />4!=4* 3!<br />3!= 3*2!<br />3!= 3*2!<br />3!= 6<br />2!= 2 *1!<br />2!= 2 <br />1!= 1 *1<br />4!=24<br />
  22. 22. <ul><li>BÚSQUEDA DICOTOMICA</li></ul>Int desde,hasta,medio,elemento,posicion; // desde y<br /> // hasta indican los límites del array que se está mirando.<br />int array[N];<br /> <br />// Dar valor a elemento.<br /> <br />for(desde=0,hasta=N-1;desde<=hasta;)<br />{<br />if(desde==hasta) // si el array sólo tiene un elemento:<br /> {<br />if(array[desde]==elemento) // si es la solución:<br />posicion=desde; // darle el valor.<br />else// si no es el valor:<br />posicion=-1; // no está en el array.<br /> break; // Salir del bucle.<br /> }<br />medio=(desde+hasta)/2; // Divide el array en dos.<br />if(array[medio]==elemento) // Si coincide con el central:<br /> {<br />posicion=medio; // ese es la solución<br />break; // y sale del bucle.<br /> }<br />else if(array[medio]>elemento) // si es menor:<br />hasta=medio-1; // elige el array izquierda.<br />else// y si es mayor:<br /> desde=medio+1; // elige el array de la derecha.<br /> }<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />1<br />9<br />2<br />3<br />4<br />1<br />3<br />4<br />Valor a buscar<br />3<br />
  23. 23. <ul><li>EL PRODUCTO</li></ul>int producto (int a, int b)<br />{<br />if (b==0)<br />return (0);<br />else<br />return (a+ producto (a, b-1));<br />}<br />Producto(3,2)= 3 + producto(3,1)<br />Producto (3,2)= 3 + 3<br />Producto(3,2)=6<br />Producto(3,1)= 3 + producto(3,0)<br /> = 3 + 0<br />
  24. 24. Recursividad en Listas<br />La estructura de listas es recursiva cuando (el “resto” de una lista es a su vez una lista), la mayoría de los programas sobre listas serán recursivos de forma natural.<br />Ejemplo: Supongamos que tenemos la lista de las personas que asistirán a un a reunión y queremos averiguar si una determinada persona irá a ella.<br />En Prolog seria: miembro(X, L)" que significa X es miembro de la lista L.<br />1. miembro(X, [X|Y]).<br />2. miembro(X, [Y|Z]) :- miembro(X,Z).<br />Una posible pregunta al programa es: ? miembro(pedro, [maría, pedro, juan, ana]).<br />? miembro(pedro, [maria, pedro, juan, ana]).<br />2. {X1®pedro, Y1®maria, Z1® [pedro,juan,ana]}<br />? miembro(pedro, [pedro, juan, ana]).<br />1. {X2®pedro, Y2® [juan,ana]}<br />ı <br />EXITO (la contestación es si)<br />
  25. 25. Definición de Árbol<br />A<br />A<br />C<br />C<br />B<br />B<br />G<br />G<br />E<br />E<br />F<br />F<br />D<br />D<br />Un árbol (tree) es un tipo de dato abstracto (T.D.A.) que consta de un conjunto finito T de nodos y una relación R (paternidad) entre los nodos tal que:<br /> Hay un nodo, especialmente designado, llamado la raíz del árbol T.<br />
  26. 26. Códigos de Árbol<br />A<br />A<br />C<br />C<br />B<br />B<br />G<br />G<br />E<br />E<br />F<br />F<br />D<br />D<br />En Prolog seria:<br />es_padre(B,D):- es_hijo(D,B).es_nieto(D,A):- es_padre(B,D), es_padre(A,B).<br />
  27. 27. Grafos<br />A<br />B<br />C<br />D<br />E<br />Un grafo (en inglés graph) es un T.D.A. que representa un conjunto finito N de nodos, llamados vértices, relacionados entre sí por un conjunto R de arcos.<br />Grafo con 5 vértices y 6 arcos.<br />Vértices del Grafo<br /> N ={ A, B, C, D, E }<br />Arcos del Grafo<br /> R={(A, A), (A, B), (A, D), (A, C), (D, C), (C, E)}<br />
  28. 28. Representación Matricial de Grafos<br /> A B C D E <br />A<br />B<br />0 1 2 3 4<br />C<br />D<br />0 1 2 3 4<br />0<br />1<br />2<br />3<br />4<br /> 0<br /> 1<br /> 1<br /> 0<br /> 0<br />E<br /> 0<br /> 0<br /> 1<br /> 0<br /> 0 <br /> 1<br /> 1<br /> 0<br /> 0<br /> 0 <br /> 1<br /> 0<br /> 0<br /> 0<br /> 0<br /> 0<br /> 1<br /> 0<br /> 0<br /> 0<br />Vértices<br />Matriz de Adyacencia<br />
  29. 29. Sucesión de Fibonacci<br />En matemática, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:<br />La sucesión inicia con 0 y 1, y a partir de ahí cada elemento es la suma de los dos anteriores.<br />0,1,1,2,3,5,8,13………..<br />A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo XIII también conocido como Fibonacci. Tiene numerosas aplicaciones en ciencias de la computación, matemáticas y teoría de juegos.<br />La sucesión fue descrita por Fibonacci como la solución a un problema de la cría de conejos: "Cierto hombre tenía una pareja de conejos juntos en un lugar cerrado y uno desea saber cuántos son creados a partir de este par en un año cuando es su naturaleza parir otro par en un simple mes, y en el segundo mes los nacidos parir también".<br />
  30. 30. 22<br />Ejemplo: Serie de Fibonacci<br />Valores: 0, 1, 1, 2, 3, 5, 8...<br />Cada término de la serie suma los 2 anteriores. Fórmula recursiva<br />fib(n) = fib (n - 1) + fib (n - 2)<br />Caso base: Fib (0)=0; Fib (1)=1<br />Caso recursivo: Fib (i) = Fib (i -1) + Fib(i -2)<br />public static int fib(int n){<br />if (n <= 1) return n; //condición base<br /> else<br /> return fib(n-1)+fib(n-2); //condición recursiva<br />}<br />
  31. 31. Aplicaciones de Fibonacci<br />Razón de oro<br />La idea<br />Si divides una línea en dos partes de manera que:<br />entonces tienes la razón de oro.<br />
  32. 32. Aplicaciones de Fibonacci<br />
  33. 33. Fractales<br /><ul><li>Un fractal es un objeto o cantidad que muestra auto-semejanza en todas las escalas y cuya estructura básica se repite a diferentes escalas.</li></ul>¿Por qué se llaman fractales?<br />El término fue propuesto por el matemático BenoîtMandelbrot en 1975 y deriva del Latín “fractus”, que significa quebrado o fracturado.<br />
  34. 34. Aplicaciones<br /><ul><li>Fenómenos Naturales.
  35. 35. Lingüística.
  36. 36. Psicología.
  37. 37. Aplicaciones electrónicas.</li></ul>Teoría del Caos<br />Teoría matemática encargada de realizar sistemas con comportamiento impredecibles y aparentemente aleatorios.<br />
  38. 38. Curva de Koch<br /><ul><li>Se construye dividiendo un segmento en partes iguales.</li></ul>Iniciador<br />Generador i=1<br />i=2<br />i=3<br />
  39. 39. Curva de Koch<br /><ul><li>Avanzar el primer tercio.
  40. 40. Girar 60° a la izquierda.
  41. 41. Avanzar otro tercio.
  42. 42. Girar 60° a la derecha.
  43. 43. Girar 60° a la derecha.
  44. 44. Avanzar otro tercio.
  45. 45. Girar 60° a la izquierda.
  46. 46. Avanzar el último tercio.</li></li></ul><li>Triangulo de Sierpinski<br />A<br /><ul><li>Se construye dividiendo el triángulo en 3 triángulos más pequeños.</li></ul>C<br />B<br />
  47. 47. Triangulo de Sierpinski<br />Sierpinski = 0<br />Sierpinski = 1<br />Sierpinski = 2<br />
  48. 48. Curva Hilbert<br /><ul><li>Se construye dividiendo un cuadrado en partes iguales uniendo sus centros.</li></li></ul><li>Imágenes Fractales<br />
  49. 49. Fin...<br />

×