algoritmos recursivos

12
ALGORITMOS RECURSIVOS Por: Edwin Armando Solis Espinosa Algoritmos Computacionales

Upload: feytho

Post on 21-Jul-2015

3.811 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Algoritmos recursivos

ALGORITMOS RECURSIVOS

Por: Edwin Armando Solis EspinosaAlgoritmos Computacionales

Page 2: Algoritmos recursivos

¿Que es un algoritmo recursivo?

*Un algoritmo recursivo es una llamada de una funcion desde la misma funcion

son recursivos aquellos algoritmos que estan dentro de ellos mismos son llamados una y otra vez.

Page 3: Algoritmos recursivos

Recursividad indirectaun algoritmo recursivo indirecto es cuando una subrutina llama a otra subrutina pero no la llama ella misma sino que la llama otra subrutina formando ciclos.

Subrutina_A-> subrutina_B->subrutina_A

subrutina_A -> subrutina_B ->subrutina_C ->subrutina_A

Page 4: Algoritmos recursivos

Ejemplo de recursividad indirecta

int par(int n); int impar(int n); int par(int n) { if (n == 0) return 1; return impar(n-1); } int impar(int n) { if (n == 0) return 0; return par(n-1); }

Page 5: Algoritmos recursivos

Tipos de recursionRECURSIÓN LINEAL : Si cada llamada recursiva genera, como mucho otra llamada recursiva- FINAL : si la llamada recursiva es la última operación que se efectúa, devolviéndose como resultado lo que se haya obtenido de la llamada recursiva sin modificaciónalguna.- NO FINAL : El resultado obtenido de la llamada recursiva se combina para dar lugar al resultado de la función que realiza la llamada.RECURSIÓN MÚLTIPLE : si alguna llamada puedegenerar más de una llamada adicional.

Page 6: Algoritmos recursivos

Ejemplo de recursion lineal:{n mayor o igual 0 y m mayor o igual 0}función MCD(n,m:entero)devuelve enterovar r :entero ;opciónn=m : r :=n ;n>m : r :=MCD(n-m,m) ;n<m : r :=MCD(n,m-n) ;fopcióndevuelve rffunción{MCD(n,m) es el maximo entero que divide a n y a m}

Page 7: Algoritmos recursivos

EJEMPLO DE RECURSION LINEAL NO FINAL{n mayor o igual 0}función FACT (n:entero)devuelve enterovar r,v :entero ;opciónn=0 : r :=1 ;n>0 : v := FACT(n-1) ;r :=v*n;fopcióndevuelve rffunción{FACT(n)=n+!}

Page 8: Algoritmos recursivos

EJEMPLO DE RECURCION MULTIPLERECURSIÓN MÚLTIPLE :{N mayor o igual 0}función Fib(n:entero)devuelve entero ;var r :entero ;opciónn1 : r:=n ;n>1 : r:=Fib(n-1)+Fib(n-2) ;fopcióndevuelve rffunción{Fib(n)=Fibonacci(n)}

Page 9: Algoritmos recursivos

Eficacia de la recursividadSe dice que es menos eficaz que la iterativa porque ocupa mas memoria y mayor tiempo de ejecucion pero hace el programa mas sencillo y comprendible.

Un programa recursivo se puede transformar en una solucion iterativa mediante el uso de pilas

Page 10: Algoritmos recursivos

Uso de pilaslas pilas se utilizan para el almacenar los valores de los parametros del subprograma , los valores de las variables y los resultados de la funcion

Calculo de 3 factorial.

1

2

3

1

2

33

1

2 6

Page 11: Algoritmos recursivos

Como diseñar un algoritmo recursivo*Determinamos parametros del problema planteado.*Resolvemos los casos triviales.*Minimizamos el caso general en terminos de un caso mas simple.*Se descompone el algoritmo en caso base y caso generalcasos base.-es el caso que se plantea desde el principio y se resuelve sin la recursividadcasos generales.-se utilizan cuando el problema es muy complejo y se utiliza en forma recursiva como lo es1.crear subprogramas.2.se usan pasos adicionales y estos con la ayuda de los subprogramas nos dan el resultado del problema

general.

Page 12: Algoritmos recursivos

Algoritmo de divide y venceras en forma teorica

el algoritmo de divide y vencerasconsiste en transformar un problema ´n´ en problemas mas pequeños de tamaños menor que ´n´

video de divide y venceras