Sunteți pe pagina 1din 4

INSTITUTO TECNOLOGICO DE

TLAXIACO

Reporte de Unidad 1
ESTRUCTURA DE DATOS

Presenta:
Jorge Coronel López

Docente: Ing. Jorge Cruz Pérez

Heroica Ciudad de Tlaxiaco, Oaxaca a 22


de a junio de 2017
Recursividad
La recursividad (recursión) es una técnica de programación elemental que permite que una función
pueda llamarse asimismo desde la misma función. Se puede utilizar la recursividad como una
alternativa a la iteración. La recursividad es una herramienta poderosa e importante en la resolución
de problemas en programación. Una solución recursiva es normalmente menos eficiente en
términos de tiempo de computadora que una solución iterativa debido a las operaciones auxiliares
que llevan consigo las llamadas suplementarias a las funciones: sin embargo, en muchas
circunstancias el uso de la recursión permite a los programadores especificar las soluciones
naturales, más lógicas, elegantes, sencillas, que serían, en caso contrario difícil de resolver.

La naturaleza de la recursividad es aquella que se llama así misma bien directamente, o bien a través
de otra función. En matemática existen numerosas funciones que tienen carácter recursivo de igual
modo numerosas circunstancias y situaciones de la vida ordinaria tienen carácter recursivo. Una
función que contiene sentencias entre las que se encuentran al menos una que llama a la propia
función se dice que es recursiva.

Cabe destacar, que una función en el campo de la informática son subprogramas o subrutina que
realizan una tarea específica y devuelve un valor, del mismo modo, se puede decir que esta
subrutina o subprograma forma parte del programa o rutina principal.

Definición de Recursividad

Existen numerosas definiciones de recursividad, algunas de las más importantes o sencillas son
éstas:

 Un objeto es recursivo si figura en su propia definición.


 Una definición recursiva es aquella en la que el objeto que se define forma parte de la
definición (recuerde la regla gramatical: lo definido nunca debe formar parte de la
definición).

Los métodos para solucionar problemas recursivos tienen un número de elementos en común.
Cuando se hace la llamada a un método recursivo para resolver un problema, este método en
realidad es capaz de resolver sólo el(los) caso(s) más simple(s), o caso(s) base. Si se hace una llamada
al método con un caso base, el método devuelve un resultado. Si se hace una llamada al método
con un problema más complejo, éste divide el problema en dos piezas conceptuales: una que el
método sabe cómo resolver y la otra que no sabe cómo. Para que la recursividad sea factible, la
pieza que no se puede resolver debe ser similar al problema original, pero debe ser una versión un
poco más simple o pequeña de éste. Como este nuevo problema se ve igual que el problema original,
el método llama a una copia nueva de sí mismo para trabajar sobre el problema más pequeño; a
esto se le conoce como llamada recursiva y o paso de recursividad. Por lo general, el paso de
recursividad incluye una instrucción return, ya que su resultado se combinará con la porción del
problema que el método supo cómo resolver, para formar un resultado que se pasará de vuelta al
método original que hizo la llamada.
Un procedimiento o función se dice recursivo si durante su ejecución se invoca directa o
indirectamente, asimismo. Esta invocación depende al menos de una condición que actúa como
condición de corte que provoca la finalización de la recursión. El paso de recursividad se ejecuta
mientras la llamada original al método sigue estando activa (es decir, mientras no haya finalizado la
ejecución). El paso de recursividad puede originar muchas más llamadas recursivas, a medida que
el método divida cada nuevo subproblema en dos piezas conceptuales. Para que la recursividad
pueda terminar en un momento dado, cada vez que el método se llama a sí mismo con una versión
un poco más simple del problema original, la secuencia de problemas cada vez más pequeños debe
convergir en el caso base. En ese punto, el método reconoce el caso base y devuelve un resultado a
la copia anterior del método. Después se produce una secuencia de instrucciones return hasta que
la llamada original al método devuelve el resultado al método que hizo la llamada. Este proceso
suena complejo en comparación con la solución convencional de problemas que hemos realizado
hasta ahora.

Ámbito de aplicación

 General.
 Problemas cuya solución se puede hallar solucionando el mismo problema, pero con un
caso de menor tamaño.

Razones de uso:

 Problemas más fáciles de resolver que con estructuras iterativas.


 Soluciones elegantes.
 Soluciones más simples.

La característica importante de la recursividad es que siempre existe un medio de salir de la


definición, mediante la cual se termina el proceso recursivo.

Ventajas:

 No es necesario definir la secuencia de pasos exacta para resolver el problema.


 Soluciones simples, claras.
 Soluciones elegantes.
 Soluciones a problemas complejos.
 Puede resolver problemas complejos.
 Solución más natural.

Desventajas:

 Podría ser menos eficiente.


 Sobrecarga asociada con las llamadas a sub algoritmos
 Una simple llamada puede generar un gran número de llamadas recursivas. (Fact(n) genera
n llamadas recursivas)
 El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas
sin fácil solución iterativa.
 La ineficiencia inherente de algunos algoritmos recursivos.
 Se puede llegar a un ciclo infinito.
 Versión no recursiva más difícil de desarrollar.
 Para la gente sin experiencia es difícil de programar.

Diseño de algoritmos recursivos

Para resolver un problema, el primer paso será la identificación de un algoritmo recursivo,


descomponer el problema de forma que su solución quede definida en función de ella misma, pero
para un tamaño menor y la tarea a realizar para un caso simple.

Se tiene que diseñar: casos base, casos generales y la solución en términos de ellos.

 Casos base: Son los casos del problema que resuelve con un segmento de código sin
recursividad.
 El número y forma de los casos base son hasta cierto punto arbitrarios. La solución será
mejor cuanto más simple y eficiente resulte el conjunto de casos seleccionados.
 Casos generales: Si el problema es suficientemente complejo, la solución se expresa, de
forma recursiva, como la unión de:
1. La solución de uno o más sub problemas de igual naturaleza, pero menor tamaño.
2. Un conjunto de pasos adicionales. Estos pasos junto con las soluciones a los sub
problemas componen la solución al problema general que queremos resolver.

Escritura de programas recursivos

 Obtención de una definición exacta del problema


 Determinar el tamaño del problema completo que hay que resolver. Parámetros en la
llamada inicial
 Resolver el(los) casos bases o triviales (no recursivos).
 Resolver el caso general en términos de un caso más pequeño (llamada recursiva).