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

Recursin:

COMPLEJ IDAD DE ALGORITMOS RECURSIVOS COMPLEJ IDAD DE ALGORITMOS RECURSIVOS


Recursin:

Proceso de resolver un problema grande descomponindolo en uno o mas
subproblemas que son de estructura idntica a la del problema original y mas subproblemas que son de estructura idntica a la del problema original y mas
simples de resolver que el problema original. Cada subproblema se resuelve de
forma similar, repitiendo la descomposicin hasta generar subproblemas tan simples
que se resuelven sin necesidad de descomponerlos que se resuelven sin necesidad de descomponerlos.

La solucin del problema original se obtiene combinando las soluciones de los
subproblemas en un proceso inverso a la descomposicin realizada subproblemas en un proceso inverso a la descomposicin realizada.

Recurrencia matemtica: Define una funcin f en trminos de ella misma.

En el ejemplo del factorial de un nmero natural, se tiene: n! =n (n-1)!

ALGORITMOS AVANZADOS Dra. Mnica Villanueva
En el ejemplo del factorial de un nmero natural, se tiene:

n! =n (n-1)!
Ejemplo 2.6: Nmeros de Fibonacci

F
n
=F
n-1
+F
n-2
n 2
F
0
=0
F
1
=1.

Observacin: Observacin:

La recursividad es una propiedad de la estrategia para resolver un
problema y no del problema en s.

Algoritmo recursivo: procedimiento que se invoca a s mismo, debe parar al
ingresar una instancia simple de resolver.
i) Directa: en algn paso del conjunto de instrucciones aparece una invocacin al propio
Esta recursin en programacin se puede dar de dos formas:
i) Directa: en algn paso del conjunto de instrucciones aparece una invocacin al propio
procedimiento.





llamada a P
Procedimiento P

ii) Indirecta: el procedimiento llama a otro procedimiento, ste a su vez llama al primero.
Asimismo, si un procedimiento llama a otros y, en algn momento, alguno de stos llama
al primero tambin estamos frente a recursin indirecta.

En toda definicin recursiva de un problema se debe establecer una condicin de borde,
es decir, una condicin que no requiera otra definicin recursiva para resolverse. Esta
determina el criterio de parada del algoritmo recursivo.
ALGORITMOS AVANZADOS Dra. Mnica Villanueva realizado por Karen vila

Para el ejemplo 2.4 del factorial de un nmero natural, se tiene por definicin:


0! =1
1! =1 1! =1
2! =1 * 2
3! =1 * 2 * 3
etc.

Al definir 3! estamos usando 2!, y as hasta llegar al 0. La definicin recursiva de factorial es




En esta definicin se da una condicin de borde que es el factorial de cero (0!=1). Observamos

1 si n=0
n! =
n*(n-1)! si n >0
( )
entonces que el problema ya no se llama a s mismo para resolverse, sino que entrega el
resultado y se detiene. En otras palabras, se asigna un valor directamente.
Algoritmo Factorial Recursivo Algoritmo Factorial Recursivo
Dado n
Factorial =n * F(n-1)
devolver Factorial.

Procedimiento F(k) Procedimiento F(k)
Si k=0 o 1 entonces devolver 1
caso contrario devolver k*F(k-1).

La complejidad de un algoritmo recursivo se expresa a travs de una ecuacin de
Recurrencia.
Sea T(n) =tiempo para calcular n!, entonces

T(n) =T(n-1) +1 si n >1
T(1) =1.
ALGORITMOS AVANZADOS Dra. Mnica Villanueva realizado por Karen vila
Si resolvemos de un modo sencillo esta ecuacin, nos encontramos con que:

T(n) = T(n-1) +1
= (T(n-2) +1)+1 = T(n-2) +2
= ((T(n-3) +1)+1)+1 = T(n-3) +3
.
.
.
= T(n-k) +k
.
.
.
= T(1) +n 1
= T(0) +n = n.

L l l jid d d l Al it F t i l R i O( ) Luego, la complejidad del Algoritmo Factorial Recursivo es ~O(n).
Observacin:

En este caso la complejidad del algoritmo No Recursivo y la del Recursivo En este caso la complejidad del algoritmo No Recursivo y la del Recursivo
son iguales. Esta situacin no siempre se tiene, en algunos problemas el
algoritmo recursivo es ms eficiente; en otros problemas el algoritmo no
recursivo es ms eficiente. En algunos problemas no es posible desarrollar
un algoritmo recursivo y uno no recursivo que no sea simulacin de la
recursin. La secuencia de Fibonacci es un ejemplo en el cual el algoritmo
no recursivo es ms eficiente no recursivo es ms eficiente.

Complejidad:

Dado que un algoritmo recursivo se invoca a s mismo, al expresar el
orden T(n) de su complejidad se obtiene una ecuacin de recurrencia.
Esta ecuacin depende del proceso de descomposicin del problema en Esta ecuacin depende del proceso de descomposicin del problema en
subproblemas.
ALGORITMOS AVANZADOS Dra. Mnica Villanueva realizado por Karen vila
Reduccin por sustraccin: Reduccin por sustraccin:
Si el tamao n del problema decrece en una cantidad constante b en cada
llamada, se realizan a llamadas recursivas y las operaciones correspondientes a
la parte no recursiva del algoritmo toman un tiempo O(n
k
) entonces:

T(n) =a T(n b) +O(n
k
) si n b T(n) =a T(n-b) +O(n ) si n b.

La solucin de esta ecuacin de recurrencia es de la forma:

=
<

+
1
1
) (
1
a si n
a si n
n T
k
k
.

>1
) (
a si a
a si n n
b
n
Reduccin por divisin: Reduccin por divisin:
Si el algoritmo con un problema de tamao n realiza a llamadas
recursivas con subproblemas de tamao n/ b y las operaciones
correspondientes a la parte no recursiva, que corresponde a
descomponer el problema en los subproblemas y luego combinar las
soluciones de stos, toman un tiempo O(n
k
) entonces: p ( )

T(n) =a T(n/b) +O(n
k
) si n b.

La solucin de esta ecuacin de recurrencia es de la forma:

>
=
<

k log
b
log

) (
a si n
b a si n n
b a si n
n T
a
k k
k k
b
.
ALGORITMOS AVANZADOS Dra. Mnica Villanueva realizado por Karen vila

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