Algoritmos recursivos

7,122 views

Published on

Published in: Education, Travel, Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,122
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
127
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Algoritmos recursivos

  1. 1. ALGORITMOS RECURSIVOS <br />Por: Edwin Armando Solis Espinosa<br />Algoritmos Computacionales<br />
  2. 2. ¿Que es un algoritmo recursivo? *Un algoritmo recursivo es una llamada de una funcion desde la misma funcionson recursivos aquellos algoritmos que estan dentro de ellos mismos son llamados una y otra vez.<br />
  3. 3. 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_Asubrutina_A -> subrutina_B ->subrutina_C ->subrutina_A<br />
  4. 4. Ejemplo de recursividad indirectaintpar(int n); int impar(int n); intpar(int n) { if(n == 0) return 1; returnimpar(n-1); } intimpar(int n) { if(n == 0) return 0; returnpar(n-1); }<br />
  5. 5. 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.<br />
  6. 6. 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 maximoentero que divide a n y a m}<br />
  7. 7. EJEMPLO DE RECURSION LINEAL NO FINAL{n mayor o igual 0}función FACT (n:entero)devuelve enterovarr,v :entero ;opciónn=0 : r :=1 ;n>0 : v := FACT(n-1) ;r :=v*n;fopcióndevuelve rffunción{FACT(n)=n+!}<br />
  8. 8. 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)}<br />
  9. 9. 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<br />
  10. 10. 1<br />1<br />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 funcionCalculo de 3 factorial.<br />2<br />3<br />2<br />1<br />3<br />3<br />2<br />6<br />
  11. 11. 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.<br />
  12. 12. Algoritmo de divide y venceras en forma teoricael algoritmo de divide y venceras consiste en transformar un problema ´n´ en problemas mas pequeños de tamaños menor que ´n´video de divide y venceras<br />

×