Está en la página 1de 11

UNIVERSIDAD AUTONOMA DE NUEVO

LEON
FACULTAD DE INGENIERIA MECANICA Y
ELECTRICA

ACTIVIDAD #3
ESTRUCTURA DE DATOS
M.C BLANCA IDALIA MARTINEZ
CAVAZOS

NOMBRE: 164109
3
OSCAR EDUARDO ESTRELLA 183821
ALEJANDRO IRUEGAS RUIZ
AGUIRRE 7

SALON: 03/03/2017 HORA: M-3


4105

~1~
INDICE
Portada
Pag.1
ndice
....Pag.2
Introduccin.
.Pag.3
Recursividad
Concepto
...Pag.4
Caractersticas .
....Pag.5
Tipos..
.....Pag.6
Funcionamiento
Pag.7
Aplicaciones
Pag.7
Ventajas
.Pag.8
Desventajas
.Pag.8
Ejemplos
Pag.9
Conclusin
..Pag.10
Bibliografa
....Pag.10

~2~
Introduccin
Qu es la recursividad? Para qu sirve? Cmo funciona?, todas
estas preguntas son la fuente de nuestra ignorancia sobre el tema,
sin embargo aqu aclararemos esas dudas en trminos generales La
recursividad es una tcnica muy utilizada en programacin
informtica.

Se suele utilizar para resolver problemas cuya solucin se puede


hallar resolviendo el mismo problema, pero para un caso de tamao
menor.

Qu se entiende por recursividad?

A una herramienta poderosa e importante en la resolucin de


problemas en programacin

Tambin en este apartado conoceremos sus 2 tipos de recursividad:

Directo(Simple)

Indirecto(Mltiple)

Y otras cosas como sus caractersticas particulares, funcionamiento y


sus ventas y desventajas y uno que otro ejemplo.

~3~
Recursividad
Concepto

La recursividad es una tcnica de programacin importante. Se utiliza


para realizar una llamada a una funcin desde la misma funcin.

Un problema que pueda ser definido en funcin de su tamao, sea


este N, pueda ser dividido en instancias ms pequeas (menores que
N) del mismo problema y se conozca la solucin explcita a las
instancias ms simples, lo que se conoce como casos base ( o lo que
llamo criterio de parada), se puede aplicar induccin sobre las
llamadas ms pequeas y suponer que estas quedan resueltas.

La recursividad es un concepto importante en informtica. Muchos


algoritmos se pueden describir mejor en trminos de recursividad.

Supongamos que P es un procedimiento que contiene una sentencia


de Llamada a si mismo o una sentencia de Llamada a un segundo
procedimiento que puede eventualmente llamar de vuelta al
procedimiento original P. Entonces P se dice que es un procedimiento
recursivo. Como el programa no ha de continuar ejecutndose
indefinidamente, un procedimiento recursivo ha de tener las dos
siguientes propiedades:

1. Debe existir un cierto criterio, llamado criterio base, por el que


el procedimiento no se llama as mismo.

1 Cada vez que el procedimiento se llame a si mismo (directa o


indirectamente), debe estar ms cerca del criterio base.

Un procedimiento recursivo con estas dos propiedades se dice que


est bien definido.

~4~
Anlogamente, una funcin se dice que est definida recursivamente
si la definicin de la funcin se refiere a s misma. De nuevo, para que
la definicin no sea circular, debe tener las dos siguientes
propiedades:

1. Debe haber ciertos argumentos, llamados valores base, para los


que la funcin no se refiera a s misma.

2. Cada vez que la funcin se refiera a s misma, el argumento de


la funcin debe acercarse ms al valor base.

Una funcin recursiva con estas dos propiedades se dice tambin que
est bien definida.

Caractersticas

Un algoritmo recursivo consta de una parte recursiva, otra iterativa o no


recursiva y una condicin de terminacin. La parte recursiva y la condicin
de terminacin siempre existen. En cambio la parte no recursiva puede
coincidir con la condicin de terminacin. Algo muy importante a tener en
cuenta cuando se use la recursividad es que es necesario asegurarnos que
llega un momento en que no hacemos ms llamadas recursivas. Si no se
cumple esta condicin el programa no parar nunca.

Un requisito importante para que sea correcto un algoritmo recursivo es que


no genere una secuencia infinita de llamadas as mismo. Claro que cualquier

~5~
algoritmo que genere tal secuencia no termina nunca. Una funcin recursiva
f debe definirse en trminos que no impliquen a f al menos en un argumento
o grupo de argumentos. Debe existir una "salida" de la secuencia de
llamadas recursivas.

Si en esta salida no puede calcularse ninguna funcin recursiva. Cualquier


caso de definicin recursiva o invocacin de un algoritmo recursivo tiene
que reducirse a la larga a alguna manipulacin de uno o casos ms simples
no recursivos.

Tipos de Recursividad

Podemos distinguir dos tipos de recursividad:

Directa: Cuando un subprograma se llama a si mismo una o mas veces


directamente.

Ejemplo:

Indirecta: Cuando se definen una serie de subprogramas usndose unos a


otros.

Ejemplo:

~6~
Cmo Funciona?

En el momento de realizar una invocacin recursiva, se suspende la


ejecucin de la funcin invocante hasta que se termina de resolver la
funcin invocada.

Si bien es la misma funcin la que se invoca, se genera un nuevo


espacio de memoria para la resolucin de la misma.

Aplicaciones

La recursividad es una herramienta muy potente en algunas aplicaciones,


sobre todo de clculo.

Para definir nuevos lenguajes de programacin: La sintaxis de un


lenguaje de programacin se define (salvo muy pocas excepciones) de
manera recursiva. Por ejemplo, si quisieras definir una oracin del espaol
~7~
pondras algo como ORACIN = SUJETO + VERBO + PREDICADO y luego
defines recursivamente cada una de las partes.

La razn de que existan lenguajes que admitan la recursividad se debe a la


existencia de estructuras especficas tipo pilas (stack) para este tipo de
procesos y memorias dinmicas.

Para estimar el tiempo de ejecucin: muchas veces el tiempo de


ejecucin de un algoritmo se expresa de manera natural como una funcin
recursiva. Especialmente los algoritmos de tipo "divide y vencers" donde
tratas de resolver una instancia de tamao n dividiendola en k partes de
aproximadamente el mismo tamao n/b y luego juntando las soluciones con
un mtodo que tarda el orden de n^d pasos:

T(n) = k T(n/b) + O(n^d)

Ventajas

La principal ventaja es la simplicidad de comprensin y su gran


potencia, favoreciendo la resolucin de problemas de manera natural,
sencilla y elegante; y facilidad para comprobar y convencerse de que
la solucin del problema es correcta.

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


problema.

Soluciones simples, claras.

Soluciones elegantes.

Soluciones a problemas complejos.

~8~
Desventajas

El principal inconveniente es la ineficiencia tanto en tiempo como en


memoria, dado que para permitir su uso es necesario transformar el
programa recursivo en otro iterativo, que utiliza bucles y pilas para
almacenar las variables.

Podra ser menos eficiente.

Sobrecarga asociada con las llamadas a subalgoritmos

Una simple llamada puede generar un gran nmero 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 fcil solucin iterativa.

La ineficiencia inherente de algunos algoritmos recursivos.

Ejemplos:

// Buscar el mximo de un vector (I)

#include <iostream>

using namespace std;

int Mayor1 (int *V, int n){

int aux;

if (n==0)

return V[0];

~9~
else {

aux = Mayor1 (V, n-1);

if (V[n]> aux)

return V[n];

else

return aux;

// Bsqueda lineal recursiva (con dos casos base)

#include <iostream>

using namespace std;

int BusquedaLineal(int *V, int n, int b)

if (n<0)

return 0;

else

if (V[n]==b)

return 1;

else

return BusquedaLineal(V,n-1,b);

Conclusin

Se puede decir que la recursividad es una tcnica de programacin bastante


til y muy interesante de estudiar. A travs de los ejemplos que la persona
pueda revisar, aprender con ms rapidez y sencillez lo que es programar
recursivamente e incluir esta tcnica cuando se le presente un problema
como los que fueron mencionados anteriormente.

Bibliografa

~ 10 ~
http://algoritmicayaracuy.blogspot.mx/2009/11/recursividad.html

http://recursividadenc.blogspot.mx/2012/03/recursividad-en-c.html

https://prezi.com/ew5p9jdvzoud/recursion-y-listas-simples-recursivas/

http://jitorres.blogspot.mx/2011/08/recursividad.html

~ 11 ~

También podría gustarte