SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Lema de bombeo
Lema de bombeoLema de bombeo
Lema de bombeo
Omega Tech
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busqueda
Cristopher Morales Ruiz
 
1.4 software numerico
1.4 software numerico1.4 software numerico
1.4 software numerico
morenito9001
 

Tendances (20)

Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Programación 3: árboles de búsqueda equilibrados
Programación 3: árboles de búsqueda equilibradosProgramación 3: árboles de búsqueda equilibrados
Programación 3: árboles de búsqueda equilibrados
 
Recursividad
RecursividadRecursividad
Recursividad
 
Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)
 
Ordenar arreglos en java
Ordenar arreglos en javaOrdenar arreglos en java
Ordenar arreglos en java
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Componentes de un SGBD
Componentes de un SGBDComponentes de un SGBD
Componentes de un SGBD
 
Lema de bombeo
Lema de bombeoLema de bombeo
Lema de bombeo
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busqueda
 
Programación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenadosProgramación 3: árboles binarios y ordenados
Programación 3: árboles binarios y ordenados
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)
 
Recursividad
RecursividadRecursividad
Recursividad
 
Unidad 2 p1
Unidad 2 p1Unidad 2 p1
Unidad 2 p1
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Estructura de datos - Unidad 2: Recursividad
Estructura de datos - Unidad 2: Recursividad Estructura de datos - Unidad 2: Recursividad
Estructura de datos - Unidad 2: Recursividad
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura lineales
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
1.4 software numerico
1.4 software numerico1.4 software numerico
1.4 software numerico
 

Similaire à Recursividad (20)

Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
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
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
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
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 

Plus 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