SlideShare una empresa de Scribd logo
1 de 29
Recursividad

María Luisa Velasco Ramírez
Definición

• Cualquier proceso puede ser definido de
  forma iterativa y de forma recursiva.
  – ������ Un proceso iterativo es aquél que
    requiere de la repetición explícita de cierta
    acción.
  – ������ Un proceso es recursivo si está definido
    total o parcialmente en términos de sí mismo.
Ejemplo Matrushka
• La Matrushka es una artesanía tradicional rusa.
  Es una muñeca de madera que contiene otra
  muñeca más pequeña dentro de sí. Esta
  muñeca, también contiene otra muñeca dentro.
  Y así, una dentro de otra.




                        3
• Para calcular 4!, por ejemplo, se puede
  utilizar un proceso iterativo o uno
  recursivo.
• De manera iterativa:
• 4! = 1 * 2 * 3 * 4 = 24
• Para definir 4! de manera recursiva se
  tiene que definirlo en términos de factorial,
  es decir, en la definición (parte derecha de
  la igualdad) tiene que aparecer el factorial.
• De manera recursiva:

          »4! = 4 * 3!
• Se observa que en el cálculo de 4! fue
  muy importante el hecho de que 0! es
  igual a 1 ¿Qué hubiera pasado si 0! se
  calculará como se calculó los demás
  factoriales? Nunca se hubiera terminado
  el proceso, o sea, tendríamos un proceso
  infinito.
• Entonces, toda definición recursiva debe
  tener, al menos, una definición base.
  Esta definición base proporciona la
  solución de salida de la recursividad.
• Para calcular 4!, 3!, 2! y 1! Se uso una
  definición recursiva, por lo que se
  estuvo entrando en recursión y cuando se
  alcanzó la definición base se comenzó a
  salir de recursión.
10
• Conclusiones:
  – Un proceso es recursivo si está definido total
    o parcialmente es términos de sí mismo.
  – Todo proceso recursivo debe tener, al
    menos: una definición base y una definición
    recursiva.
Diseño e implementación de algoritmos
recursivos.

• La solución recursiva a un problema de
  repetición se obtiene respondiendo dos
  preguntas:
  – 1. ¿Cómo se resuelve el caso más pequeño
    del problema?


  – La respuesta a esta pregunta debe ser no-
    recursiva y plantear una condición de salida,
    es decir, proporcionar la definición base.
• En el cálculo de factorial, la pregunta
  sería: ¿cuál es el número más pequeño
  para el que se puede obtener factorial?


• 2. ¿Cómo se resuelve un caso general del
  problema, sabiendo que ya se tiene el
  caso anterior más pequeño?
• De tal forma que, la definición recursiva de
  n! es:
  – a) n! = 1 si n = 0 ������ Definición base
  – b) n! = n * (n – 1)! si n > 0 ������ Definición
    recursiva
• Dependiendo      del  problema    que
  implemente el módulo éste diagrama se
  puede ver modificado.

• Por ejemplo, si tiene más de una
  definición base, si tiene más de una
  definición recursiva o si en la solución
  recursiva tiene que realizar alguna
  operación antes de volverse a ejecutar o
  no.
Implementación de la función recursiva
La importancia del return en una función

• 1o. Hace que la función tome el valor de lo
  que se está regresando. En factorial: si n
  == 0 factorial = 1 sino factorial= n *
  factorial(n – 1)
• 2o. Termina la ejecución de la función,
  regresando el control de la ejecución al
  módulo en que fue llamada (a la
  instrucción que se debe ejecutar después
  de que la función fue llamada).
Conclusiones

• La solución recursiva de un problema se obtiene
  respondiendo dos preguntas: ¿cómo se
  resuelve el caso más pequeño? y ¿cómo se
  resuelve un caso general, sabiendo que ya se
  tiene el caso anterior más pequeño?

• Para implementar soluciones recursivas se
  utilizan los módulos: las funciones (int, float,
  double, etc.).
• El return de una función realiza dos
  operaciones: asigna a la función el valor que
  regresa y termina la ejecución de la misma,
  regresando el control a la siguiente instrucción
  que se tiene que realizar, después de la llamada
  a la función.
Otro ejemplo
•   public static void imprimeNaturales(int n)
•   {
•   if (n == 1)
•   System.out.println(“1”);
•   else
•   {
•   System.out.println(n);
•   imprimeNaturales(n – 1);
•   } _________________________________ 2
•   }
•   public static void main(String args[])
•   {
•   ….
•   imprimeNaturales(5);
•   System.out.println(“Fin del proceso”);
    ______ 1
•   }
• Considerar un ejemplo más, la serie de los
  números de Fibonacci cuya definición ya
  se nos da de manera recursiva. Vamos a
  escribir su implementación y
  posteriormente haremos la representación
  de la pila.
  – F0 = 1
  – F1 = 1
  – Fn = Fn -1 + Fn – 2 si n > 1
¿Cuándo usar recursividad?

• Para simplificar el código.
• Cuando la estructura de datos es recursiva
  ejemplo : árboles.

¿Cuándo no usar recursividad?
• Cuando los métodos usen arreglos largos.
• Cuando el método cambia de manera
  impredecible de campos.
• Cuando las iteraciones sean la mejor opción.
                      27
Algunas Definiciones.


 •   Cuando un procedimiento incluye una
     llamada a sí mismo se conoce como
     recursión directa.




                    28
Algunas Definiciones.


• Cuando un procedimiento llama a otro
  procedimiento    y    éste    causa   que    el
  procedimiento original sea invocado, se conoce
  como recursión indirecta.


NOTA: Cuando un procedimiento recursivo se llama recursivamente a
  si mismo varias veces, para cada llamada se crean copias
  independientes de las variables declaradas en el procedimiento.



                               29

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Recursividad
RecursividadRecursividad
Recursividad
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en Java
 
Cuadro comparativo hilos
Cuadro comparativo hilosCuadro comparativo hilos
Cuadro comparativo hilos
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en Haskell
 
Programacion no lineal
Programacion no linealProgramacion no lineal
Programacion no lineal
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
3.1.1 Representación en memoria.pptx
3.1.1 Representación en memoria.pptx3.1.1 Representación en memoria.pptx
3.1.1 Representación en memoria.pptx
 
fundamentos de costos
fundamentos de costosfundamentos de costos
fundamentos de costos
 
Autómatas finitos no deterministas
Autómatas finitos no deterministasAutómatas finitos no deterministas
Autómatas finitos no deterministas
 
Programación no lineal
Programación no linealProgramación no lineal
Programación no lineal
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Mapa conceptual - Institutos Reguladores Calidad de Software
Mapa conceptual - Institutos Reguladores Calidad de SoftwareMapa conceptual - Institutos Reguladores Calidad de Software
Mapa conceptual - Institutos Reguladores Calidad de Software
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
ADO
ADOADO
ADO
 
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
Informe técnico - Métodos de búsqueda Unidad 6 (Rubí Verónica)
 
Metodos de programacion no-lineal
Metodos de programacion no-linealMetodos de programacion no-lineal
Metodos de programacion no-lineal
 
Estimación Software por Puntos de Función
Estimación Software por Puntos de FunciónEstimación Software por Puntos de Función
Estimación Software por Puntos de Función
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 

Destacado (6)

ResolucióN De Problemas
ResolucióN De ProblemasResolucióN De Problemas
ResolucióN De Problemas
 
Recursividad
RecursividadRecursividad
Recursividad
 
52 ejercicios resueltos en pseudocodigo
52 ejercicios resueltos en pseudocodigo52 ejercicios resueltos en pseudocodigo
52 ejercicios resueltos en pseudocodigo
 
7222014 ejercicios-resueltos-con-pseint
7222014 ejercicios-resueltos-con-pseint7222014 ejercicios-resueltos-con-pseint
7222014 ejercicios-resueltos-con-pseint
 
U1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos ComplejidadU1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos Complejidad
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
 

Similar a Recursividad (20)

Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 
Unidad 2 p1
Unidad 2 p1Unidad 2 p1
Unidad 2 p1
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Recursividad
RecursividadRecursividad
Recursividad
 
2 clase 1_recursividad
2 clase 1_recursividad2 clase 1_recursividad
2 clase 1_recursividad
 
Recursividad.ppt
Recursividad.pptRecursividad.ppt
Recursividad.ppt
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
II Unidad
II UnidadII Unidad
II Unidad
 
II Unidad
II UnidadII Unidad
II Unidad
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
Cap1.1 recursividad
Cap1.1 recursividadCap1.1 recursividad
Cap1.1 recursividad
 
recursividad
recursividadrecursividad
recursividad
 
Enfoques
EnfoquesEnfoques
Enfoques
 
Programación Orientada a Objetos parte 3
Programación Orientada a Objetos  parte 3Programación Orientada a Objetos  parte 3
Programación Orientada a Objetos parte 3
 
recursividad.pptx
recursividad.pptxrecursividad.pptx
recursividad.pptx
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
 

Más de María Luisa Velasco (20)

Respaldando bd
Respaldando bdRespaldando bd
Respaldando bd
 
Sql
SqlSql
Sql
 
Sql
SqlSql
Sql
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Ejercicios normalización
Ejercicios normalizaciónEjercicios normalización
Ejercicios normalización
 
Normalizacion
NormalizacionNormalizacion
Normalizacion
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Modulos sgbd
Modulos sgbdModulos sgbd
Modulos sgbd
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Induccion fundbd2012
Induccion fundbd2012Induccion fundbd2012
Induccion fundbd2012
 
Induccion fundbd2012
Induccion fundbd2012Induccion fundbd2012
Induccion fundbd2012
 
Guia eejerciciospracticos
Guia eejerciciospracticosGuia eejerciciospracticos
Guia eejerciciospracticos
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Proyecto final de algoritmica
Proyecto final de algoritmicaProyecto final de algoritmica
Proyecto final de algoritmica
 
Ejercicios arreglos4
Ejercicios arreglos4Ejercicios arreglos4
Ejercicios arreglos4
 
Ejercicios arreglos2
Ejercicios arreglos2Ejercicios arreglos2
Ejercicios arreglos2
 
Seguridad bd
Seguridad bdSeguridad bd
Seguridad bd
 
Ejercicios3parte
Ejercicios3parteEjercicios3parte
Ejercicios3parte
 

Recursividad

  • 2. Definición • Cualquier proceso puede ser definido de forma iterativa y de forma recursiva. – ������ Un proceso iterativo es aquél que requiere de la repetición explícita de cierta acción. – ������ Un proceso es recursivo si está definido total o parcialmente en términos de sí mismo.
  • 3. Ejemplo Matrushka • La Matrushka es una artesanía tradicional rusa. Es una muñeca de madera que contiene otra muñeca más pequeña dentro de sí. Esta muñeca, también contiene otra muñeca dentro. Y así, una dentro de otra. 3
  • 4. • Para calcular 4!, por ejemplo, se puede utilizar un proceso iterativo o uno recursivo. • De manera iterativa: • 4! = 1 * 2 * 3 * 4 = 24
  • 5. • Para definir 4! de manera recursiva se tiene que definirlo en términos de factorial, es decir, en la definición (parte derecha de la igualdad) tiene que aparecer el factorial. • De manera recursiva: »4! = 4 * 3!
  • 6.
  • 7. • Se observa que en el cálculo de 4! fue muy importante el hecho de que 0! es igual a 1 ¿Qué hubiera pasado si 0! se calculará como se calculó los demás factoriales? Nunca se hubiera terminado el proceso, o sea, tendríamos un proceso infinito.
  • 8. • Entonces, toda definición recursiva debe tener, al menos, una definición base. Esta definición base proporciona la solución de salida de la recursividad.
  • 9. • Para calcular 4!, 3!, 2! y 1! Se uso una definición recursiva, por lo que se estuvo entrando en recursión y cuando se alcanzó la definición base se comenzó a salir de recursión.
  • 10. 10
  • 11. • Conclusiones: – Un proceso es recursivo si está definido total o parcialmente es términos de sí mismo. – Todo proceso recursivo debe tener, al menos: una definición base y una definición recursiva.
  • 12. Diseño e implementación de algoritmos recursivos. • La solución recursiva a un problema de repetición se obtiene respondiendo dos preguntas: – 1. ¿Cómo se resuelve el caso más pequeño del problema? – La respuesta a esta pregunta debe ser no- recursiva y plantear una condición de salida, es decir, proporcionar la definición base.
  • 13. • En el cálculo de factorial, la pregunta sería: ¿cuál es el número más pequeño para el que se puede obtener factorial? • 2. ¿Cómo se resuelve un caso general del problema, sabiendo que ya se tiene el caso anterior más pequeño?
  • 14. • De tal forma que, la definición recursiva de n! es: – a) n! = 1 si n = 0 ������ Definición base – b) n! = n * (n – 1)! si n > 0 ������ Definición recursiva
  • 15.
  • 16. • Dependiendo del problema que implemente el módulo éste diagrama se puede ver modificado. • Por ejemplo, si tiene más de una definición base, si tiene más de una definición recursiva o si en la solución recursiva tiene que realizar alguna operación antes de volverse a ejecutar o no.
  • 17. Implementación de la función recursiva
  • 18. La importancia del return en una función • 1o. Hace que la función tome el valor de lo que se está regresando. En factorial: si n == 0 factorial = 1 sino factorial= n * factorial(n – 1)
  • 19. • 2o. Termina la ejecución de la función, regresando el control de la ejecución al módulo en que fue llamada (a la instrucción que se debe ejecutar después de que la función fue llamada).
  • 20. Conclusiones • La solución recursiva de un problema se obtiene respondiendo dos preguntas: ¿cómo se resuelve el caso más pequeño? y ¿cómo se resuelve un caso general, sabiendo que ya se tiene el caso anterior más pequeño? • Para implementar soluciones recursivas se utilizan los módulos: las funciones (int, float, double, etc.).
  • 21. • El return de una función realiza dos operaciones: asigna a la función el valor que regresa y termina la ejecución de la misma, regresando el control a la siguiente instrucción que se tiene que realizar, después de la llamada a la función.
  • 22. Otro ejemplo • public static void imprimeNaturales(int n) • { • if (n == 1) • System.out.println(“1”); • else • { • System.out.println(n); • imprimeNaturales(n – 1); • } _________________________________ 2 • } • public static void main(String args[]) • { • …. • imprimeNaturales(5); • System.out.println(“Fin del proceso”); ______ 1 • }
  • 23. • Considerar un ejemplo más, la serie de los números de Fibonacci cuya definición ya se nos da de manera recursiva. Vamos a escribir su implementación y posteriormente haremos la representación de la pila. – F0 = 1 – F1 = 1 – Fn = Fn -1 + Fn – 2 si n > 1
  • 24.
  • 25.
  • 26.
  • 27. ¿Cuándo usar recursividad? • Para simplificar el código. • Cuando la estructura de datos es recursiva ejemplo : árboles. ¿Cuándo no usar recursividad? • Cuando los métodos usen arreglos largos. • Cuando el método cambia de manera impredecible de campos. • Cuando las iteraciones sean la mejor opción. 27
  • 28. Algunas Definiciones. • Cuando un procedimiento incluye una llamada a sí mismo se conoce como recursión directa. 28
  • 29. Algunas Definiciones. • Cuando un procedimiento llama a otro procedimiento y éste causa que el procedimiento original sea invocado, se conoce como recursión indirecta. NOTA: Cuando un procedimiento recursivo se llama recursivamente a si mismo varias veces, para cada llamada se crean copias independientes de las variables declaradas en el procedimiento. 29