Вы находитесь на странице: 1из 29

Universidad Hispanoamericana

Recursividad
Estructura de Datos

Prof. Ing. Erick Lpez Ch.

Conceptos bsicos

Un procedimiento o funcin se dice


recursivo si durante su ejecucin se invoca directa o indirectamente as mismo. Esta invocacin depende al menos de una condicin que acta como condicin de corte que provoca la finalizacin de la recursin.

Conceptos bsicos

La recursividad consiste en realizar una


definicin de un concepto en trminos del propio concepto que se est definiendo.

Conceptos bsicos

Un algoritmo recursivo consta de: 1. Al menos un caso trivial o base, es decir,


que no vuelva a invocarse y que se ejecuta cuando se cumple cierta condicin. Los casos base corresponden a situaciones que se pueden resolver con facilidad.

Conceptos bsicos

2. El caso general es el que vuelve a invocar al algoritmo con un caso ms pequeo del mismo.
Para que una funcin o procedimiento recursivo funcione se debe cumplir que: - Existe una salida no recursiva del procedimiento o funcin y funciona correctamente en ese caso. - Cada llamada al procedimiento o funcin se refiere a un caso ms pequeo del mismo. - Funciona correctamente todo el procedimiento o funcin.

Ejemplos:

Los nmeros naturales se pueden definir de la siguiente forma: 0 es un Nmero natural y el sucesor de un nmero natural es tambin un nmero natural. El factorial de un nmero natural n, es 1 si dicho nmero es 0,o n multiplicado por el factorial del nmero n-1, en caso contrario. La n-sima potencia de un nmero x, es 1 si n es igual a 0, o el producto de x por la potencia (n-1)-sima de x, cuando n esmayor que 0.

Pasos

1. Definicin exacta del problema 2. Determinar el tamao del problema


completo a resolver. As se determinarn los valores de los parmetros en la llamada inicial al procedimiento o funcin. 3. Resolver el caso base en el que el problema puede expresarse no recursivamente. 4. Resolver el caso general en trminos de un caso mas pequeo del mismo problema

Pasos

Siempre se debe avanzar hacia un caso base: Las llamadas recursivas simplifican el problema y, en ltima instancia, los casos base nos sirven para obtener la solucin.

Recursividad vs. iteracin

La carga computacional: (tiempo de


CPU y espacio en memoria) asociada a las llamadas recursivas. (d) La redundancia (algunas soluciones recursivas resuelven el mismo problema en repetidas ocasiones). (d) La complejidad de la solucin (en ocasiones, la solucin iterativa es muy difcil de encontrar). (v)

Recursividad vs. iteracin

La concisin, legibilidad y elegancia del


cdigo resultante (la solucin recursiva del problema puede ser ms sencilla). (v)

Como optar por recursividad?

Los problemas pueden ser redefinidos en


trminos de uno o ms subproblemas, idnticos en naturaleza al problema original, pero de alguna forma menores en tamao. Uno o ms subproblemas tienen solucin directa o conocida, no recursiva.

Utilizacin recursividad

Recorrido de rboles Anlisis de gramticas y lenguajes Exploracin y evaluacin de expresiones


aritmticas. Juegos en los que un movimiento se puede dar en funcin de otro de menor nivel o complicacin. Mtodos de ordenamiento Computacin grfica

Bsqueda de soluciones recursivas:

Cuatro preguntas bsicas


[P1] Cmo se puede definir el problema en trminos de uno o ms problemas ms pequeos del mismo tipo que el original? [P2] Qu instancias del problema harn de caso base?

Bsqueda de soluciones recursivas:

[P3] Conforme el problema se reduce de tamao se alcanzar el caso base? [P4] Cmo se usa la solucin del caso base para construir una solucin correcta al problema original?

Como optar por recursividad? (2)

Aplicando la redefinicin del problema en


trminos de problemas ms pequeos, dicho problema se reduce sucesivamente a los subproblemas cuyas soluciones se conocen directamente. La solucin a los problemas ms simples se utiliza para construir la solucin al problema inicial.

Ejemplo Factorial
FUNCTION FACTORIAL (N:INTEGER):INTEGER BEGIN IF N = 0 THEN FACTORIAL := 1 ELSE FACTORIAL := N*FACTORIAL(N-1) END;

Ejemplo Suma Vector


Realice una funcin recursiva que devuelva la suma de los elementos de un vector sabiendo que el primer elemento est en la posicin LI y el ltimo en la posicin LS
FUNCTION SUMA(V:VECTOR; LI, LS:INTEGER):INTEGER; BEGIN IF LI = LS THEN SUMA := V[LI] ELSE SUMA := V[LI] + SUMA (V, LI + 1, LS) END

Funcin Potencia
Function Potencia ( Base, Exponente : Integer ) : Integer; begin If Exponente = 1 Then Potencia:= Base else Potencia := Base * Potencia ( Base, Exponente - 1); end;

Ejemplo Secuencia Lucas


Escriba una funcin recursiva para calcular el trmino n-simo de la secuencia de Lucas: 1, 3, 4, 7, 11, 18, 29, 47,...

Universidad Hispanoamericana

Вам также может понравиться