SlideShare uma empresa Scribd logo
1 de 21
Recursividad
Ing. Ricardo Soriano Paredes sorianoricardo@Hotmail.com
RECURSIVIDAD
• Un método o función es recursiva cuando se llama a sí misma.
• Se puede llamar a sí mismo, bien directamente o bien
indirectamente a través de otro método.
f1
f1 f2 fn…
Definición
Func_Recursiva(m)
Func_Recursiva(m-1)
Func_Recursiva(m-1)
Imaginemos que el método func() es recursivo. Cuando este método se ejecuta, en
algún punto, se llamará a sí mismo. Tal como muestra el diagrama, no hay ningún bucle
involucrado, ya que se realiza una copia del método. A continuación, las sentencias de
la copia comienzan a ejecutarse, aunque esta vez con distintos argumentos. Si se
desencadena otra llamada recursiva, se realizará otra copia. Y así sucesivamente hasta
que, en una copia del método func(), los argumentos permitan alcanzar el caso base y
permitan que la copia haga un "return", es decir, que transfiera el control de nuevo a su
padre. En ese momento, el padre toma el control, ejecuta el resto de su sentencia y,
cuando llegue el momento, pasa el control a su padre. Este proceso se repite hasta que
el control vuelve al método de llamada inicial, que ha estado esperando este momento
todo el tiempo y ahora puede terminar.
Actividades que realiza una Función recursiva
Los programas recursivos tienden a ser lentos porque generan muchas llamadas a
funciones y éstas pueden tener mucha sobrecarga. La sobrecarga es trabajo que la
computadora tiene que realizar. Para cada llamada a una función, la computadora
debe:
1) Guardar las variables locales del módulo que llama
2) Encontrar el método
3) Hacer copias de los argumentos que llaman por valor
4) Pasar los argumentos
5) Ejecutar el método
6) Encontrar al módulo que llama
7) Restituir las variables locales del módulo que llama.
Visualización de la recursión
Recursión vs. iteración
• La iteración se puede utilizar en lugar de la recursión
• Un algoritmo iterativo utiliza una construcción de bucle
• Un algoritmo recursivo utiliza una estructura de ramificación
• Soluciones recursivas son a menudo menos eficiente, en
términos de tiempo y espacio, que las soluciones iterativas.
• La recursividad puede simplificar la solución de un problema, a
menudo resulta en menos líneas de código que una solución
iterativa.
Un algoritmo recursivo utiliza una estructura de ramificación
Recursión vs. iteración
• Cada llamada recursiva produce una nueva creación y copia de las
variables de la función, esto consume más memoria e incrementa el
tiempo de ejecución. Por el contrario, la iteración se produce dentro
de un método, de modo que las operaciones suplementarias en la
llamada al método y en la asignación de memoria adicional son
omitidas.
Consideraciones al hacer una función recursiva
• Determine el caso base
• Condición de salida
• Determine el caso general
• Función/método recursivo
Un algoritmo recursivo debe tener dos partes: una parte de terminación en la que se deja de
hacer llamadas, es el caso base, y una llamada recursiva con sus propios parámetros.
Escribir un método recursivo que calcule el factorial de
un número n y un programa que pida un
número entero y escriba su factorial..
• La función factorial (símbolo: !) se define como el producto de
todos los números enteros positivos desde 1 hasta n.
Ejemplo
• Por ejemplo si se quiere calcular el factorial de 5, se tendría:
5! = 5*4*3*2*1
FCC - BUAP Primavera 2015BBM11
FCC - BUAP Primavera 2015BBM12
Ejemplo con recursividad
5!
5* 4!
4* 3!
3* 2!
2* 1!
1
5!
5* 4!
4* 3!
3* 2!
2* 1!
1
Se devuelve 1
Se devuelve 2!=2*1=2
Se devuelve 3!=3*2=6
Se devuelve 4!=4*6=24
Se devuelve 5!=5*24=120
Valor devuelto 120
Traza del programa factorial
public static void main(String[] ar)throws IOException
{
int n;
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
do
{
System.out.print("Introduzca número n: ");
n = Integer.parseInt(entrada.readLine());
}while (n < 0);
System.out.println("n t" + n + "!= " + factorial(n));
}
static double factorial (int n)
{
if (n <= 1)
return 1;
else
{
double resultado = n * factorial(n - 1);
return resultado;
} }
Inicialmente, en la ubicación “A” hay una pila de discos. EL disco más pequeño está
en la parte superior, y el diámetro de los discos aumenta a medida que se
desciende hacia la base de la “torre”. Las ubicaciones, “B” y “C” están vacías
inicialmente.
Fuente Auxiliar Destino
Reglas:
- Mover un disco a la vez.
- Nunca colocar un disco encima de un disco más pequeño.
Ejemplo Torres de Hanoi
Análisis paso a paso – Torres de Hanoi
2 A,C,B
3 A,B,C
1 A,B,C
A->C
A->B
C->B
A->C
N
N
2 B,A,C
1 B,C,A
B->A
B->C
1 A,B,C
A->C
N
Ejemplo Gráfico - Torres de Hanoi
Autor [Daniel Alvarez]
Tipos de recursión
• Recursividad simple: Aquella en cuya definición sólo aparece una llamada
recursiva. Se puede transformar con facilidad en algoritmos iterativos.
• Factorial
• Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro
del cuerpo de la función, resultando más difícil de hacer de forma iterativa.
• Fibonacci
FCC - BUAP Primavera 2015BBM19
• Recursividad anidada: En algunos de los argumentos de la llamada recursiva hay
una nueva llamada a sí misma.
• Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una
llamada a sí misma de forma indirecta, a través de otras funciones. Es decir es
aquella en la que una función es llamada a otra función y esta a su vez llama a la
función que la llamó.
FCC - BUAP Primavera 2015BBM20
Tipos de recursión
Conclusiones
• Se ha de evitar utilizar recursividad en situaciones de rendimiento
crítico o exigencia de altas prestaciones en tiempo y en memoria, ya
que las llamadas recursivas emplean tiempo y consumen memoria
adicional. No es conveniente el uso de una llamada recursiva para
sustituir un simple bucle.
• La solución recursiva siempre requerirá más tiempo y espacio debido
a las llamadas adicionales a los métodos.
Fuente [Joyanes A. Luis, “Estructura De Datos en Java” ]

Mais conteúdo relacionado

Semelhante a Curso recursividad (20)

Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Recursión
RecursiónRecursión
Recursión
 
Recursividad
RecursividadRecursividad
Recursividad
 
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)
 
Recursividad
RecursividadRecursividad
Recursividad
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad3
Recursividad3Recursividad3
Recursividad3
 
2 clase 1_recursividad
2 clase 1_recursividad2 clase 1_recursividad
2 clase 1_recursividad
 
04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc
 
Recursividad2019
Recursividad2019Recursividad2019
Recursividad2019
 
Programas_Recursivos.pptx
Programas_Recursivos.pptxProgramas_Recursivos.pptx
Programas_Recursivos.pptx
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
recursividad
recursividadrecursividad
recursividad
 
Tema 1 Recursión
Tema 1 RecursiónTema 1 Recursión
Tema 1 Recursión
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 

Mais de PEDRO OSWALDO BELTRAN CANESSA

Mais de PEDRO OSWALDO BELTRAN CANESSA (20)

Curso android studio
Curso android studioCurso android studio
Curso android studio
 
Ds 004-2017-minedu-reglamento-de-la-ley-n-29988
Ds 004-2017-minedu-reglamento-de-la-ley-n-29988Ds 004-2017-minedu-reglamento-de-la-ley-n-29988
Ds 004-2017-minedu-reglamento-de-la-ley-n-29988
 
Las 6 generaciones de computadoras
Las 6 generaciones de computadorasLas 6 generaciones de computadoras
Las 6 generaciones de computadoras
 
E economie air_france
E economie air_franceE economie air_france
E economie air_france
 
Ley reforma-magisterial-29944
Ley reforma-magisterial-29944Ley reforma-magisterial-29944
Ley reforma-magisterial-29944
 
Manual técnicas de programación pbc
Manual técnicas de programación pbcManual técnicas de programación pbc
Manual técnicas de programación pbc
 
1 gestión de_proyectos
1 gestión de_proyectos1 gestión de_proyectos
1 gestión de_proyectos
 
Diseno creacion-bases-datos-completo
Diseno creacion-bases-datos-completoDiseno creacion-bases-datos-completo
Diseno creacion-bases-datos-completo
 
Mini curso de java
Mini curso de javaMini curso de java
Mini curso de java
 
Bromas informáticas
Bromas informáticasBromas informáticas
Bromas informáticas
 
Manual de microcontroladores
Manual de microcontroladoresManual de microcontroladores
Manual de microcontroladores
 
Teoría de Números
Teoría de NúmerosTeoría de Números
Teoría de Números
 
Matemática Lúdica
Matemática LúdicaMatemática Lúdica
Matemática Lúdica
 
Programacion en Java (II)
Programacion en Java (II)Programacion en Java (II)
Programacion en Java (II)
 
PROGRAMACIÓN EN JAVA (I)
PROGRAMACIÓN EN JAVA (I)PROGRAMACIÓN EN JAVA (I)
PROGRAMACIÓN EN JAVA (I)
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
Windows 7
Windows 7Windows 7
Windows 7
 
Instalacin de-moodle-1203175408925671-3
Instalacin de-moodle-1203175408925671-3Instalacin de-moodle-1203175408925671-3
Instalacin de-moodle-1203175408925671-3
 
Introduccion a la programación orientada a objetos
Introduccion a la programación orientada a objetosIntroduccion a la programación orientada a objetos
Introduccion a la programación orientada a objetos
 
Contraseñas en seguridad informática
Contraseñas en seguridad informáticaContraseñas en seguridad informática
Contraseñas en seguridad informática
 

Último

PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Katherine Concepcion Gonzalez
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxEliaHernndez7
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primariaWilian24
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnnlitzyleovaldivieso
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024IES Vicent Andres Estelles
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfGruberACaraballo
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptxRigoTito
 

Último (20)

PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 

Curso recursividad

  • 1. Recursividad Ing. Ricardo Soriano Paredes sorianoricardo@Hotmail.com
  • 2. RECURSIVIDAD • Un método o función es recursiva cuando se llama a sí misma. • Se puede llamar a sí mismo, bien directamente o bien indirectamente a través de otro método. f1 f1 f2 fn… Definición
  • 4. Imaginemos que el método func() es recursivo. Cuando este método se ejecuta, en algún punto, se llamará a sí mismo. Tal como muestra el diagrama, no hay ningún bucle involucrado, ya que se realiza una copia del método. A continuación, las sentencias de la copia comienzan a ejecutarse, aunque esta vez con distintos argumentos. Si se desencadena otra llamada recursiva, se realizará otra copia. Y así sucesivamente hasta que, en una copia del método func(), los argumentos permitan alcanzar el caso base y permitan que la copia haga un "return", es decir, que transfiera el control de nuevo a su padre. En ese momento, el padre toma el control, ejecuta el resto de su sentencia y, cuando llegue el momento, pasa el control a su padre. Este proceso se repite hasta que el control vuelve al método de llamada inicial, que ha estado esperando este momento todo el tiempo y ahora puede terminar.
  • 5. Actividades que realiza una Función recursiva Los programas recursivos tienden a ser lentos porque generan muchas llamadas a funciones y éstas pueden tener mucha sobrecarga. La sobrecarga es trabajo que la computadora tiene que realizar. Para cada llamada a una función, la computadora debe: 1) Guardar las variables locales del módulo que llama 2) Encontrar el método 3) Hacer copias de los argumentos que llaman por valor 4) Pasar los argumentos 5) Ejecutar el método 6) Encontrar al módulo que llama 7) Restituir las variables locales del módulo que llama.
  • 6. Visualización de la recursión
  • 7. Recursión vs. iteración • La iteración se puede utilizar en lugar de la recursión • Un algoritmo iterativo utiliza una construcción de bucle • Un algoritmo recursivo utiliza una estructura de ramificación • Soluciones recursivas son a menudo menos eficiente, en términos de tiempo y espacio, que las soluciones iterativas. • La recursividad puede simplificar la solución de un problema, a menudo resulta en menos líneas de código que una solución iterativa. Un algoritmo recursivo utiliza una estructura de ramificación
  • 8. Recursión vs. iteración • Cada llamada recursiva produce una nueva creación y copia de las variables de la función, esto consume más memoria e incrementa el tiempo de ejecución. Por el contrario, la iteración se produce dentro de un método, de modo que las operaciones suplementarias en la llamada al método y en la asignación de memoria adicional son omitidas.
  • 9. Consideraciones al hacer una función recursiva • Determine el caso base • Condición de salida • Determine el caso general • Función/método recursivo Un algoritmo recursivo debe tener dos partes: una parte de terminación en la que se deja de hacer llamadas, es el caso base, y una llamada recursiva con sus propios parámetros.
  • 10. Escribir un método recursivo que calcule el factorial de un número n y un programa que pida un número entero y escriba su factorial.. • La función factorial (símbolo: !) se define como el producto de todos los números enteros positivos desde 1 hasta n. Ejemplo
  • 11. • Por ejemplo si se quiere calcular el factorial de 5, se tendría: 5! = 5*4*3*2*1 FCC - BUAP Primavera 2015BBM11
  • 12. FCC - BUAP Primavera 2015BBM12 Ejemplo con recursividad 5! 5* 4! 4* 3! 3* 2! 2* 1! 1 5! 5* 4! 4* 3! 3* 2! 2* 1! 1 Se devuelve 1 Se devuelve 2!=2*1=2 Se devuelve 3!=3*2=6 Se devuelve 4!=4*6=24 Se devuelve 5!=5*24=120 Valor devuelto 120
  • 13. Traza del programa factorial
  • 14. public static void main(String[] ar)throws IOException { int n; BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); do { System.out.print("Introduzca número n: "); n = Integer.parseInt(entrada.readLine()); }while (n < 0); System.out.println("n t" + n + "!= " + factorial(n)); } static double factorial (int n) { if (n <= 1) return 1; else { double resultado = n * factorial(n - 1); return resultado; } }
  • 15. Inicialmente, en la ubicación “A” hay una pila de discos. EL disco más pequeño está en la parte superior, y el diámetro de los discos aumenta a medida que se desciende hacia la base de la “torre”. Las ubicaciones, “B” y “C” están vacías inicialmente. Fuente Auxiliar Destino Reglas: - Mover un disco a la vez. - Nunca colocar un disco encima de un disco más pequeño. Ejemplo Torres de Hanoi
  • 16.
  • 17. Análisis paso a paso – Torres de Hanoi 2 A,C,B 3 A,B,C 1 A,B,C A->C A->B C->B A->C N N 2 B,A,C 1 B,C,A B->A B->C 1 A,B,C A->C N
  • 18. Ejemplo Gráfico - Torres de Hanoi Autor [Daniel Alvarez]
  • 19. Tipos de recursión • Recursividad simple: Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos. • Factorial • Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa. • Fibonacci FCC - BUAP Primavera 2015BBM19
  • 20. • Recursividad anidada: En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. • Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones. Es decir es aquella en la que una función es llamada a otra función y esta a su vez llama a la función que la llamó. FCC - BUAP Primavera 2015BBM20 Tipos de recursión
  • 21. Conclusiones • Se ha de evitar utilizar recursividad en situaciones de rendimiento crítico o exigencia de altas prestaciones en tiempo y en memoria, ya que las llamadas recursivas emplean tiempo y consumen memoria adicional. No es conveniente el uso de una llamada recursiva para sustituir un simple bucle. • La solución recursiva siempre requerirá más tiempo y espacio debido a las llamadas adicionales a los métodos. Fuente [Joyanes A. Luis, “Estructura De Datos en Java” ]