Está en la página 1de 10

Repblica Bolivariana de Venezuela Ministerio del Poder Popular Para La Defensa Universidad Nacional Experimental Polit cnica De Las

!uerzas "rmadas UNE!" #$aracu% Extensi&n Nir'ua

Recursividad

Profesor( Luis )e*uera +nte'rante( Luis ,ern-ndez Pro'ramaci&n +

RECURSIVIDAD

El -rea de la pro'ramaci&n es mu% amplia % con muc.os detalles/ Los pro'ramadores necesitan ser capaces de resolver todos los problemas *ue se les presente a trav s del computador aun cuando en el len'ua0e *ue utilizan no .a%a una manera directa de resolver los problemas/ En el len'ua0e de pro'ramaci&n 12 as3 como en otros len'ua0es de pro'ramaci&n2 se puede aplicar una t cnica *ue se le dio el nombre de recursividad por su funcionalidad/ Esta t cnica es utilizada en la pro'ramaci&n estructurada para resolver problemas *ue ten'an *ue ver con el factorial de un nmero2 o 0ue'os de l&'ica/ Las asi'naciones de memoria pueden ser din-micas o est-ticas % .a% diferencias entre estas dos % se pueden aplicar las dos en un pro'rama cual*uiera/

La recursi&n es un concepto amplio2 dif3cil de precisar/ "parece en numerosas actividades de la vida diaria2 por e0emplo2 en una foto'raf3a de una foto'raf3a/ 4tro caso mu% ilustrativo de recursi&n es el *ue se presenta en los pro'ramas de televisi&n en los cuales un periodista transfiere el control a otro periodista *ue se encuentra en otra ciudad2 % ste .ace lo propio con un tercero/ "*u3 nos limitaremos a estudiar la recursividad desde el punto de vista de pro'ramaci&n/ La recursi&n permite definir un ob0eto 5problemas2 estructuras de datos6 en t rminos de s3 mismo/ 1asos t3picos de estructuras de datos definidas de manera recursiva son los -rboles % las listas li'adas/ "l'unos e0emplos de problemas *ue se definen recursivamente son el factorial de un nmero2 la serie de !ibonacci2 etc/

CUANDO Y COMO TERMINA ENTONCES EL MTODO RECURSIVO?

)e entiende *ue puede parecer un proceso infinito2 pero la clave est- en *ue en cada llamada el problema se 7simplifica8 de tal modo *ue lle'ar- el momento en *ue no .ar- falta llamar nuevamente al m todo recursivo/ 7Recordemos *ue la rama tiene ramas2 *ue a su vez tiene rama pero lle'a el momento en *ue se lle'a a una rama *ue solo tiene .o0as/8

1abe resaltar *ue la recursividad es una .erramienta mu% importante en la pro'ramaci&n *ue en muc.os casos permite expresar al'oritmos de forma simple % le'ible/

CMO SABER SI UN PROBLEMA PUEDE SER RESUELTO MEDIANTE LA RECURSIVIDAD?

9odos los problemas candidatos a ser implementados por medio de la recursividad deben tener : caracter3sticas fundamentales(

El proceso puede expresarse en funcin de s mismo:

)e refiere a la capacidad *ue tienen al'unos procesos de dividirse en subprocesos2 en donde cada parte e0ecutara un proceso base .eredado del proceso principal/ 1abe destacar *ue cada parte deber- contener la misma

estructura funcional2 es decir2 no puede existir subprocesos *ue ten'an funciones o atributos diferentes al resto/

Debe identificarse claramente el inicio y final del proceso

1omo %a se entiende los al'oritmos no podr-n efectuarse infinitamente en nuestro procesador o decidir por s3 solo cuando detenerse/ Debemos determinar cuales deber-n ser las condiciones de partida de nuestro al'oritmo % cuando este deber- detenerse % mostrar al'n resultado 5nos referiremos a estos puntos como 7condiciones de partidas8 % 7caso base8 respectivamente en lo *ue resta del art3culo6/ "l iniciar esta tarea podr3a ser una de las m-s complicadas de la recursividad2 pero con un poco de pr-ctica podr-s identificar ambos puntos f-cilmente/En muc.os casos 5siempre % cuando sea posible6 ser- de 'ran a%uda contar con un bos*ue0o de la soluci&n de nuestro problema de manera iterativa/ Esto nos brindara un punto de partida al momento de dividir nuestro problema e identificar las condiciones de partidas % el caso base

ESCRITURA DE PROGRAMAS RECURSIVOS


; </=4btenci&n de una definici&n exacta del problema ; :/=Determinar el tama>o del problema completo *ue .a% *ue resolver Par-metros en la llamada inicial ; ?/=Resolver el5los6 casos bases o triviales 5no recursivos6/

; @/=Resolver el caso 'eneral en t rminos de un caso m-s pe*ue>o 5llamada recursiva6

RECURSIN INDIRECTA
Un pro'rama llama a otro subpro'rama % este a su vez al primero El subpro'rama " llama al B % este a su vez llama al primero "2 es decir *ue lue'o de tantas llamadas el control re'resa al subpro'rama "/ 4tro caso de recursi&n ndirecta es el caso b6 de la fi'ura2 *ue muestra como un subpro'rama llama a otro % este a un tercero % una vez e0ecutado el subpro'rama vuelve a donde fue llamado/ En el 0emplo de la fi'ura el pro'rama " llama al B % este al 1A cuando finaliza la e0ecuci&n 1 vuelve a donde fue llamado B % este a su vez al subpro'rama " # pro'rama inicio

RECURSIN MUTUA
1uando un subpro'rama llama a otro % ste a su vez al primero2 se

produce lo *ue se denomina recursi&n mutua o cruzada2 *ue consiste en *ue un

subpro'rama provo*ue una llamada a s3 mismo2 indirectamente2 a trav s de otro u otros subpro'ramas/ En estos casos2 se presenta un problema para definir los subpro'ramas2 por*ue uno de ellos tendr- *ue ser definido antes del otro2 % la llamada *ue .a'a al se'undo se .ace a un identificador desconocido2 contraviniendo la norma de Pascal por la *ue un identificador tiene *ue ser declarado antes de usarlo/

VENTAJAS Y DESVENTAJAS
Ventajas )oluciones simples2 claras )oluciones ele'antes/ )oluciones a problemas comple0os/

Desventajas )obrecar'a asociada con las llamadas a subal'oritmos Una simple llamada puede 'enerar un 'ran numero de llamadas recursivas/ La ineficiencia in.erente de al'unos al'oritmos recursivos/

QU PASA SI SE HACE UNA LLAMADA RECURSIVA QUE NO TERMINA?


1ada llamada recursiva almacena los par-metros *ue se pasaron al procedimiento2 % otras variables necesarias para el correcto funcionamiento del pro'rama/ Por tanto si se produce una llamada recursiva infinita2 esto es2 *ue no

termina nunca2 lle'a un momento en el *ue no *uedar- memoria para almacenar m-s datos2 % en ese momento se abortar- la e0ecuci&n del pro'rama

FUNCIONAMIENTO INTERNO DE LA RECURSIVIDAD


1uando se llama a una funci&n recursiva2 se crea un nuevo 0ue'o de variables locales2 de este modo2 si la funci&n .ace una llamada a si misma2 se 'uardan sus variables % par-metros en una pila de datos2 % la nueva instancia de la funci&n t raba0ar- con su propia copia de las variables locales2 cuando esta se'unda instancia de la funci&n retorna2 recupera las variables % los par-metros de la pila % continua la e0ecuci&n en el punto en *ue .ab3a sido llamada/ La ma%or3a de los len'ua0es de alto nivel como 12 1 BB o Cava permiten la construcci&n de subrutinas2 funciones *ue pueden ser llamadas a si mismas 5recursivas6 de manera natural/

Ejercicio 1
Dinclude Estdio/.F void introduccion56G printf5HEl )i'uiente Pro'rama 1alcula el !actorial de un Numero///InInH6AJ int datos56G int numA printf5H+n'rese un numero entero( InH6A scanf5HKuH2 Lnum6A printf5HInH6A return5num6AJ lon' int factorial5int num6G

lon' int factM<A if5numFN6G factMnumOfactorial5num=<6AJ PPuso de la recursividad return5fact6AJ void imprimir5int num2lon' int fact6G if5numEN6 printf5HEl !actorial de un Numero Ne'ativo No ExisteInInH6A else if5numMMN6 printf5HEl !actorial de Kld es( <InInH2num6A else printf5HEl !actorial de Kd es( KldInInH2 num2 fact6A printf5HPresione una 9ecla para )alir///H6AJ main56G int numA lon' int factA introduccion56A numMdatos56A factMfactorial5num6A imprimir5num2 fact6A 'etc.e56A returnA J

Ejercicio 2
Dinclude Eiostream/.F Dinclude Estdlib/.F Dinclude Estdio/.F POModulo Para la +ntroduccionOP void introd56G

printf5H(((((((((((((((((((((((((((((((((((((((((((((((((((((InH6A printf5HItItIt+N9R4DU11+4NInH6A printf5HItEl )i'uiente Pro'rama 9iene 1omo !uncionInH6A printf5HItLeer Un Numero Entero E imprimir su valor enInH6A printf5HItItIt"steriscosInH6A printf5H(((((((((((((((((((((((((((((((((((((((((((((((((((((InH6A J POModulo Para la +mpresion usando recursividadOP void ast5int num6G if5numFM<6G printf5HIt OH6A ast5num=<6A PPuso de la recursividad printf5HInH6A JJ POLlamado a las !uncionesOP main56 G int numA introd56A printf5HInH6A POEntrada de datosOP doG printf5H+n'rese Un Numero EnteroInH6A scanf5HKdH2Lnum6A printf5HInH6A JQ.ile5numEN6A ast5num6A printf5HInInH6A s%stem5HP"U)EH6A return NA J

Ejercicio 3

Dinclude Estdio/.F int mcd5int2int6A int main5void6G int n<2n:A printf5H+n'rese el primer numero( H6A scanf5HKdH2Ln<6A printf5H+n'rese el se'undo numero( H6A scanf5HKdH2Ln:6A printf5HEl maximo comun divisor es( KdH2mcd5n<2n:66A 'etc.ar56A return NAJ int mcd5int a2int b6G if5bMMN6 return aA else return mcd5b2aKb6AJ

También podría gustarte