SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt? (20)

Recursividad directa e indirecta
Recursividad directa e indirectaRecursividad directa e indirecta
Recursividad directa e indirecta
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Presentación3
Presentación3Presentación3
Presentación3
 
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
 
Cap1.1 recursividad
Cap1.1 recursividadCap1.1 recursividad
Cap1.1 recursividad
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Recursividad
RecursividadRecursividad
Recursividad
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Divide y Venceras
Divide y VencerasDivide y Venceras
Divide y Venceras
 
Recursividad en POO - Java
Recursividad en POO - JavaRecursividad en POO - Java
Recursividad en POO - Java
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmos
 
Algoritmos divide y vencerás
Algoritmos divide y vencerásAlgoritmos divide y vencerás
Algoritmos divide y vencerás
 
Presentación2
Presentación2Presentación2
Presentación2
 
Fundamentos Divide Y Venceras
Fundamentos Divide Y VencerasFundamentos Divide Y Venceras
Fundamentos Divide Y Venceras
 
Recursividad
RecursividadRecursividad
Recursividad
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
Divide y Vencerás
Divide y VencerásDivide y Vencerás
Divide y Vencerás
 

Andere mochten auch (20)

Hashing
HashingHashing
Hashing
 
Java básico
Java  básicoJava  básico
Java básico
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Caso b eliminar el nodo 7[1]
Caso b eliminar el nodo 7[1]Caso b eliminar el nodo 7[1]
Caso b eliminar el nodo 7[1]
 
Practicar metodos
Practicar metodosPracticar metodos
Practicar metodos
 
Induccion analisis
Induccion analisisInduccion analisis
Induccion analisis
 
Elementos básicos del lenguaje java alumno
Elementos básicos del lenguaje java alumnoElementos básicos del lenguaje java alumno
Elementos básicos del lenguaje java alumno
 
Eliminarnodoarbolbinariobusqueda
EliminarnodoarbolbinariobusquedaEliminarnodoarbolbinariobusqueda
Eliminarnodoarbolbinariobusqueda
 
Java
JavaJava
Java
 
Planclase programacion
Planclase programacionPlanclase programacion
Planclase programacion
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
Arreglos java
Arreglos javaArreglos java
Arreglos java
 
Ejecutando mi primer programa en java
Ejecutando mi primer programa en javaEjecutando mi primer programa en java
Ejecutando mi primer programa en java
 
Búsqueda secuencialybinaria
Búsqueda secuencialybinariaBúsqueda secuencialybinaria
Búsqueda secuencialybinaria
 
Ordenamiento quicksort
Ordenamiento quicksortOrdenamiento quicksort
Ordenamiento quicksort
 
Ejercicio java
Ejercicio javaEjercicio java
Ejercicio java
 
Ejercicio java1
Ejercicio java1Ejercicio java1
Ejercicio java1
 
Proyecto finalprogramacion
Proyecto finalprogramacionProyecto finalprogramacion
Proyecto finalprogramacion
 
Ejercicio java1.1
Ejercicio java1.1Ejercicio java1.1
Ejercicio java1.1
 
Proyecto final de análisis de algoritmos
Proyecto final de análisis de algoritmosProyecto final de análisis de algoritmos
Proyecto final de análisis de algoritmos
 

Ähnlich wie Recursividad_Definición (20)

Unidad 2 p1
Unidad 2 p1Unidad 2 p1
Unidad 2 p1
 
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
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. 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
 
Recursividad
RecursividadRecursividad
Recursividad
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
TECNICAS DE RESOLUCION DE PROBLEMAS
TECNICAS DE RESOLUCION DE PROBLEMASTECNICAS DE RESOLUCION DE PROBLEMAS
TECNICAS DE RESOLUCION DE PROBLEMAS
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 

Mehr von 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_Definición

  • 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