SlideShare una empresa de Scribd logo
1 de 15
Recursividad
1
Análisis de algoritmos
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í. Ésta muñeca,
también contiene otra muñeca dentro. Y así, una
dentro de otra.
2
Recursividad: el concepto
• La recursividad es un concepto fundamental en
matemáticas y en computación.
• Es una alternativa diferente para implementar
estructuras de repetición (ciclos). Los módulos se
hacen llamadas recursivas.
• Se puede usar en toda situación en la cual la solución
pueda ser expresada como una secuencia de
movimientos, pasos o transformaciones gobernadas
por un conjunto de reglas no ambiguas.
3
Función recursiva
Las funciones recursivas se componen de:
• Caso base: una solución simple para un caso
particular (puede haber más de un caso base).
4
Función recursiva
• Caso recursivo: una solución que involucra volver a utilizar la
función original, con parámetros que se acercan más al caso base.
Los pasos que sigue el caso recursivo son los siguientes:
1. El procedimiento se llama a sí mismo
2. El problema se resuelve, tratando el mismo
problema, pero de tamaño menor
3. La manera en la cual el tamaño del problema
disminuye asegura que el caso base
eventualmente se alcanzara
5
Ejemplo: factorial
Escribe un programa que calcule el factorial (!) de un
entero no negativo. He aquí algunos ejemplos de
factoriales:
• 1! = 1
• 2! = 2  2 * 1
• 3! = 6  3 * 2 * 1
• 4! = 24  4 * 3 * 2 * 1
• 5! = 120  5 * 4 * 3 * 2 * 1
6
Ejemplo: factorial (iterativo-repetetitivo)
int factorial (int n) {
int fact = 1;
for (int i = 1; i <= n; i++)
fact = i * fact;
return fact;
}
7
int factorial (int n)
comienza
fact  1
para i  1 hasta n
fact  i * fact
regresa fact
termina
Ejemplo: factorial (recursivo)
int factorial (int n)
comienza
si n = 0 entonces
regresa 1
otro
regresa factorial (n-1)*n
termina
int factorial (int n) {
if n == 0 return 1;
else
return factorial (n-1) * n;
}
8
Solución Recursiva
Dado un entero no negativo x, regresar el factorial de x fact:
Entrada n entero no negativo,
Salida:entero.
int fact (int n)
{
if (n == 0)
return 1;
else
return fact(n – 1) * n ;
}
9
Es importante determinar
un caso base, es decir un
punto en el cual existe una
condición por la cual no se
requiera volver a llamar a
la misma función.
¿Por qué escribir programas recursivos?
• Son mas cercanos a la descripción matemática.
• Generalmente mas fáciles de analizar
• Se adaptan mejor a las estructuras de datos recursivas.
• Los algoritmos recursivos ofrecen soluciones estructuradas,
modulares y elegantemente simples.
10
Factible de utilizar recursividad
• Para simplificar el código.
• Cuando la estructura de datos es recursiva
ejemplo : árboles.
• 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. 11
No factible utilizar recursividad
Otros conceptos
• Cuando un procedimiento incluye una llamada a sí mismo se
conoce como recursión directa.
• Cuando un procedimiento llama a otro procedimiento y
éste causa que el procedimiento original sea invocado,
se conoce como recursión indirecta.
12
Ejemplo: Serie de Fibonacci
Valores: 0, 1, 1, 2, 3, 5, 8...
Cada término de la serie suma los 2 anteriores. Fórmula recursiva
fib(n) = fib (n - 1) + fib (n - 2)
Caso base: Fib (0)=0; Fib (1)=1
Caso recursivo: Fib (i) = Fib (i -1) + Fib(i -2)
int fib(int n){
if (n <= 1) return n; //condición base
else
return fib(n-1)+fib(n-2); //condición recursiva
} 13
Ejemplo: Serie de Fibonacci
Traza del cálculo recursivo
14
Fib(1)
return
Fib(3)
Fib(2) +
return 1
Fib(0)
return Fib(1) +
return 1 return 0
Recursión vs iteración
Repetición
Iteración: ciclo explícito (se expresa claramente)
Recursión: repetidas invocaciones a método
Terminación
Iteración: el ciclo termina o la condición del ciclo falla
Recursión: se reconoce el caso base
En ambos casos podemos tener ciclos infinitos
Considerar que resulta más positivo para cada problema
• LA RECURSIVIDAD SE DEBE USAR CUANDO SEA REALMENTE NECESARIA, ES
DECIR, CUANDO NO EXISTA UNA SOLUCIÓN ITERATIVA SIMPLE. 15

Más contenido relacionado

Similar a Recursividad (20)

03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
2.1 recursividad
2.1 recursividad2.1 recursividad
2.1 recursividad
 
Metodologia de la programacion recursividad
Metodologia de la programacion   recursividadMetodologia de la programacion   recursividad
Metodologia de la programacion recursividad
 
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
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
Cap1.1 recursividad
Cap1.1 recursividadCap1.1 recursividad
Cap1.1 recursividad
 
Unidad 2 p1
Unidad 2 p1Unidad 2 p1
Unidad 2 p1
 
Algoritmos y Estructura de Datos
Algoritmos y Estructura de DatosAlgoritmos y Estructura de Datos
Algoritmos y Estructura de Datos
 
2 algoritmos-1
2 algoritmos-12 algoritmos-1
2 algoritmos-1
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Recursividad ia lili
Recursividad ia liliRecursividad ia lili
Recursividad ia lili
 
Recursividad ia lili
Recursividad ia liliRecursividad ia lili
Recursividad ia lili
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Modulo4
Modulo4Modulo4
Modulo4
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
recursividadexposicion1-090727182853-phpapp01.ppt
recursividadexposicion1-090727182853-phpapp01.pptrecursividadexposicion1-090727182853-phpapp01.ppt
recursividadexposicion1-090727182853-phpapp01.ppt
 
Recursividad
RecursividadRecursividad
Recursividad
 

Más de Fernando Solis

BÚSQUEDA DE SUBCADENAS EN C
BÚSQUEDA DE SUBCADENAS EN CBÚSQUEDA DE SUBCADENAS EN C
BÚSQUEDA DE SUBCADENAS EN CFernando Solis
 
Almacenamiento de informacion en una estructura
Almacenamiento de informacion en una estructuraAlmacenamiento de informacion en una estructura
Almacenamiento de informacion en una estructuraFernando Solis
 
Entrada y salida de datos
Entrada y salida de datosEntrada y salida de datos
Entrada y salida de datosFernando Solis
 
Longitud y Concatenacion
Longitud y ConcatenacionLongitud y Concatenacion
Longitud y ConcatenacionFernando Solis
 
Lectura de datos de cadena
Lectura de datos de cadenaLectura de datos de cadena
Lectura de datos de cadenaFernando Solis
 
Introducción a Tipos de Datos Abstractos (TDA)
Introducción a Tipos de Datos Abstractos (TDA)Introducción a Tipos de Datos Abstractos (TDA)
Introducción a Tipos de Datos Abstractos (TDA)Fernando Solis
 
Archivos Binarios vs Archivos de Texto
Archivos Binarios vs Archivos de TextoArchivos Binarios vs Archivos de Texto
Archivos Binarios vs Archivos de TextoFernando Solis
 
DEFINICION DE CADENAS O STRINGS
DEFINICION DE CADENAS O STRINGSDEFINICION DE CADENAS O STRINGS
DEFINICION DE CADENAS O STRINGSFernando Solis
 
Declaración e inicialización de variables de tipo cadena
Declaración e inicialización de variables de tipo cadenaDeclaración e inicialización de variables de tipo cadena
Declaración e inicialización de variables de tipo cadenaFernando Solis
 
Comparacion de arreglos Strings
Comparacion de arreglos StringsComparacion de arreglos Strings
Comparacion de arreglos StringsFernando Solis
 
Acceso en tipos de datos abstractos
Acceso en tipos de datos abstractosAcceso en tipos de datos abstractos
Acceso en tipos de datos abstractosFernando Solis
 
Arreglo Orden Seleccion
Arreglo  Orden SeleccionArreglo  Orden Seleccion
Arreglo Orden SeleccionFernando Solis
 
Algoritmos de Busqueda
Algoritmos de BusquedaAlgoritmos de Busqueda
Algoritmos de BusquedaFernando Solis
 

Más de Fernando Solis (20)

AULA INVERTIDA.pdf
AULA INVERTIDA.pdfAULA INVERTIDA.pdf
AULA INVERTIDA.pdf
 
Subcadenas-en-C
Subcadenas-en-CSubcadenas-en-C
Subcadenas-en-C
 
BÚSQUEDA DE SUBCADENAS EN C
BÚSQUEDA DE SUBCADENAS EN CBÚSQUEDA DE SUBCADENAS EN C
BÚSQUEDA DE SUBCADENAS EN C
 
Almacenamiento de informacion en una estructura
Almacenamiento de informacion en una estructuraAlmacenamiento de informacion en una estructura
Almacenamiento de informacion en una estructura
 
Entrada y salida de datos
Entrada y salida de datosEntrada y salida de datos
Entrada y salida de datos
 
Longitud y Concatenacion
Longitud y ConcatenacionLongitud y Concatenacion
Longitud y Concatenacion
 
Lectura de datos de cadena
Lectura de datos de cadenaLectura de datos de cadena
Lectura de datos de cadena
 
Introducción a Tipos de Datos Abstractos (TDA)
Introducción a Tipos de Datos Abstractos (TDA)Introducción a Tipos de Datos Abstractos (TDA)
Introducción a Tipos de Datos Abstractos (TDA)
 
Archivos Binarios vs Archivos de Texto
Archivos Binarios vs Archivos de TextoArchivos Binarios vs Archivos de Texto
Archivos Binarios vs Archivos de Texto
 
DEFINICION DE CADENAS O STRINGS
DEFINICION DE CADENAS O STRINGSDEFINICION DE CADENAS O STRINGS
DEFINICION DE CADENAS O STRINGS
 
Declaración e inicialización de variables de tipo cadena
Declaración e inicialización de variables de tipo cadenaDeclaración e inicialización de variables de tipo cadena
Declaración e inicialización de variables de tipo cadena
 
Conversion de Strings
Conversion de StringsConversion de Strings
Conversion de Strings
 
Comparacion de arreglos Strings
Comparacion de arreglos StringsComparacion de arreglos Strings
Comparacion de arreglos Strings
 
Cadenas y/o strings
Cadenas y/o stringsCadenas y/o strings
Cadenas y/o strings
 
Asignacion
AsignacionAsignacion
Asignacion
 
Acceso en tipos de datos abstractos
Acceso en tipos de datos abstractosAcceso en tipos de datos abstractos
Acceso en tipos de datos abstractos
 
Arreglo Orden Seleccion
Arreglo  Orden SeleccionArreglo  Orden Seleccion
Arreglo Orden Seleccion
 
Algoritmos de Busqueda
Algoritmos de BusquedaAlgoritmos de Busqueda
Algoritmos de Busqueda
 
Quick Sort
Quick SortQuick Sort
Quick Sort
 
Ordenacion Radix
Ordenacion RadixOrdenacion Radix
Ordenacion Radix
 

Último

TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfMARIAPAULAMAHECHAMOR
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 

Último (20)

Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Herramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdfHerramientas de Inteligencia Artificial.pdf
Herramientas de Inteligencia Artificial.pdf
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 

Recursividad

  • 2. 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í. Ésta muñeca, también contiene otra muñeca dentro. Y así, una dentro de otra. 2
  • 3. Recursividad: el concepto • La recursividad es un concepto fundamental en matemáticas y en computación. • Es una alternativa diferente para implementar estructuras de repetición (ciclos). Los módulos se hacen llamadas recursivas. • Se puede usar en toda situación en la cual la solución pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas. 3
  • 4. Función recursiva Las funciones recursivas se componen de: • Caso base: una solución simple para un caso particular (puede haber más de un caso base). 4
  • 5. Función recursiva • Caso recursivo: una solución que involucra volver a utilizar la función original, con parámetros que se acercan más al caso base. Los pasos que sigue el caso recursivo son los siguientes: 1. El procedimiento se llama a sí mismo 2. El problema se resuelve, tratando el mismo problema, pero de tamaño menor 3. La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzara 5
  • 6. Ejemplo: factorial Escribe un programa que calcule el factorial (!) de un entero no negativo. He aquí algunos ejemplos de factoriales: • 1! = 1 • 2! = 2  2 * 1 • 3! = 6  3 * 2 * 1 • 4! = 24  4 * 3 * 2 * 1 • 5! = 120  5 * 4 * 3 * 2 * 1 6
  • 7. Ejemplo: factorial (iterativo-repetetitivo) int factorial (int n) { int fact = 1; for (int i = 1; i <= n; i++) fact = i * fact; return fact; } 7 int factorial (int n) comienza fact  1 para i  1 hasta n fact  i * fact regresa fact termina
  • 8. Ejemplo: factorial (recursivo) int factorial (int n) comienza si n = 0 entonces regresa 1 otro regresa factorial (n-1)*n termina int factorial (int n) { if n == 0 return 1; else return factorial (n-1) * n; } 8
  • 9. Solución Recursiva Dado un entero no negativo x, regresar el factorial de x fact: Entrada n entero no negativo, Salida:entero. int fact (int n) { if (n == 0) return 1; else return fact(n – 1) * n ; } 9 Es importante determinar un caso base, es decir un punto en el cual existe una condición por la cual no se requiera volver a llamar a la misma función.
  • 10. ¿Por qué escribir programas recursivos? • Son mas cercanos a la descripción matemática. • Generalmente mas fáciles de analizar • Se adaptan mejor a las estructuras de datos recursivas. • Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y elegantemente simples. 10
  • 11. Factible de utilizar recursividad • Para simplificar el código. • Cuando la estructura de datos es recursiva ejemplo : árboles. • 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. 11 No factible utilizar recursividad
  • 12. Otros conceptos • Cuando un procedimiento incluye una llamada a sí mismo se conoce como recursión directa. • Cuando un procedimiento llama a otro procedimiento y éste causa que el procedimiento original sea invocado, se conoce como recursión indirecta. 12
  • 13. Ejemplo: Serie de Fibonacci Valores: 0, 1, 1, 2, 3, 5, 8... Cada término de la serie suma los 2 anteriores. Fórmula recursiva fib(n) = fib (n - 1) + fib (n - 2) Caso base: Fib (0)=0; Fib (1)=1 Caso recursivo: Fib (i) = Fib (i -1) + Fib(i -2) int fib(int n){ if (n <= 1) return n; //condición base else return fib(n-1)+fib(n-2); //condición recursiva } 13
  • 14. Ejemplo: Serie de Fibonacci Traza del cálculo recursivo 14 Fib(1) return Fib(3) Fib(2) + return 1 Fib(0) return Fib(1) + return 1 return 0
  • 15. Recursión vs iteración Repetición Iteración: ciclo explícito (se expresa claramente) Recursión: repetidas invocaciones a método Terminación Iteración: el ciclo termina o la condición del ciclo falla Recursión: se reconoce el caso base En ambos casos podemos tener ciclos infinitos Considerar que resulta más positivo para cada problema • LA RECURSIVIDAD SE DEBE USAR CUANDO SEA REALMENTE NECESARIA, ES DECIR, CUANDO NO EXISTA UNA SOLUCIÓN ITERATIVA SIMPLE. 15