Recursividad terminal<br />Presentación 2.<br />
¿ que es la recursividad?<br />La recursividad es una técnica de programación,<br />que consiste en que una serie de instr...
Recursividad<br />La recursividad es un proceso muy útil a la hora de programar, pero en ocasiones, el uso de este tiene u...
Recursividad terminal<br />En algunos algoritmos recursivos, se puede implementar un caso de recursividad especial llamado...
Recursividad terminal<br />características de la recursividad terminal.<br />*las funciones deben cumplir la condición que...
Recursividad terminal<br />Una ventaja de la recursividad por cola es que podemos evitar la sobrecarga de cada llamada a l...
EJEMPLOS<br />A continuación se muestra un programa que calcule el factorial de un numero usando la recursividad normal.<b...
EJEMPLOS<br />Ahora se muestra el mismo programa, que calcula el factorial de una función, pero usando la recursividad ter...
  aquí se ase una funcion para que la estructura del main quede igual que en el otro ejemplo
Funcionmain con captura de dato y llamada de funcion</li></li></ul><li>Comparando<br />Recursividad normal<br />Recursivid...
Recursividad terminal<br />Una función recursiva normal se puede convertir a funcion recursiva termianl usando en la funci...
Recursividad terminal<br />Si estos dos programas se corren, ambos funcionaran y nos darán un resultado correcto, pero ent...
Recursividad terminal<br />La recursión de cola es importante para algunos lenguajes de alto nivel, En especial en idiomas...
Recursividad terminal<br />    En estos idiomas la recursión de cola es la forma más utilizada comúnmente (y ha veces la ú...
Recursividad terminal<br />En muchos casos, hacer una función recursiva por la cola (tail-recursive) es posible empleando ...
Upcoming SlideShare
Loading in …5
×

Recursividad terminal

5,703 views

Published on

Descripcion de la recursividad terminal o de cola

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,703
On SlideShare
0
From Embeds
0
Number of Embeds
1,221
Actions
Shares
0
Downloads
70
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Recursividad terminal

  1. 1. Recursividad terminal<br />Presentación 2.<br />
  2. 2. ¿ que es la recursividad?<br />La recursividad es una técnica de programación,<br />que consiste en que una serie de instrucciones se repiten como una subtarea de la tarea principal, es decir, las funciones, procesos o rutinas se llaman a sí mismos cada vez que lo requieran y se ejecutan repetidas veces hasta que se satisface una condición específica.<br />
  3. 3. Recursividad<br />La recursividad es un proceso muy útil a la hora de programar, pero en ocasiones, el uso de este tiene un costo computacional alto, debido a las constantes llamadas a la misma función o rutina y muchas veces estas llamadas consumen demasiada memoria.<br />
  4. 4. Recursividad terminal<br />En algunos algoritmos recursivos, se puede implementar un caso de recursividad especial llamado recursividad terminal, (también conocido como recursividad por cola), la cual es una técnica para optimizar la recursividad eliminando las constantes llamadas recursivas<br />“La recursividad terminal o por cola es cuando la llamada recursiva es la última instrucción de la función.”<br />
  5. 5. Recursividad terminal<br />características de la recursividad terminal.<br />*las funciones deben cumplir la condición que en la parte que realiza la llamada a la función, no debe existir ninguna otra sentencia.<br />*el compilador o interprete,<br /> tratan a la función recursiva <br /> como una función iterativa<br />
  6. 6. Recursividad terminal<br />Una ventaja de la recursividad por cola es que podemos evitar la sobrecarga de cada llamada a la función y nos evitamos el gasto de memoria de pila. <br />.<br />*pila de llamadas es donde se almacena los valores de las variables de las subrutinas, y el stackoverflow (desbordamiento de pila) es cuando la memoria ya no es sufiente para almacenar todos los datos<br />Con una función de recursividad terminal se puede evitar lo que se conoce como stackoverflow, que ocurre cuando la pila de llamadas (en ingles callstack) consume mucha memoria<br />
  7. 7. EJEMPLOS<br />A continuación se muestra un programa que calcule el factorial de un numero usando la recursividad normal.<br />*funcion recursiva<br />*condicion<br />* los valores que debe regresar<br />*en el return se vuelve a llamar la funcion<br />*funcion principal<br />*captura de dato<br />*llamada de la funcion<br />
  8. 8. EJEMPLOS<br />Ahora se muestra el mismo programa, que calcula el factorial de una función, pero usando la recursividad terminal o de cola<br />*funcion recursiva terminal<br /><ul><li>Se le agrega un contador, para que el proceso se realice alli mismo y no tener que llamar a la funcion de nuevo
  9. 9. aquí se ase una funcion para que la estructura del main quede igual que en el otro ejemplo
  10. 10. Funcionmain con captura de dato y llamada de funcion</li></li></ul><li>Comparando<br />Recursividad normal<br />Recursividad de cola<br />
  11. 11. Recursividad terminal<br />Una función recursiva normal se puede convertir a funcion recursiva termianl usando en la función original un parámetro adicional, usado para ir guardando un resultado de tal manera que la llamada recursiva ya no tiene una operación pendiente.<br />También se usa una función adicional para mantener la sintaxis de como llamamos normalmente a la función. En el caso del factorial, para seguir llamando a la función de la forma fact(n).<br />
  12. 12. Recursividad terminal<br />Si estos dos programas se corren, ambos funcionaran y nos darán un resultado correcto, pero entre mas grande sea el numero que se desea calcular, mas cerca estará el programa de recursión normal de “tronar”, ya que el numero que se ocupe será el numero de veces que se estará autollamado la función, cargando así la memoria, con el riesgo de un desbordamiento.<br />
  13. 13. Recursividad terminal<br />La recursión de cola es importante para algunos lenguajes de alto nivel, En especial en idiomas funcional y los idiomas miembros del familia Lisp. <br />
  14. 14. Recursividad terminal<br /> En estos idiomas la recursión de cola es la forma más utilizada comúnmente (y ha veces la única forma disponible) de ejecución de la iteración. <br /> La especificación del lenguaje del sistema que exige las llamadas de la cola para ser optimizado, para que no crezca la pila. Las llamadas de la recursividad Tail también puede ser utilizado en Perl, con una variante del "goto" La declaración que toma un nombre de función.<br />
  15. 15. Recursividad terminal<br />En muchos casos, hacer una función recursiva por la cola (tail-recursive) es posible empleando técnicas adecuadas de programación. <br />Siempre que esto se logre podemos esperar un incremento significativo en la eficiencia de los programas.<br />
  16. 16. Recursividad terminal<br />Se pude decir que la principal característica de la recursividad tail es que la llamada recursiva esta en la ultima posición ejecutada del procedimiento.<br />Otros nombres de la Recursividad Tail: <br />Recursividad terminal.<br />Recursividad de cola.<br />Recursividad de extremo final. <br />Recursividad de extremo de cola.<br />

×