Estructuras de Datos Recursividad.

Slides:



Advertisements
Presentaciones similares
Análisis de algoritmos
Advertisements

Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Recursividad.
Análisis de los algoritmos Unidad 7. Análisis La resolución práctica de un problema – algoritmo o método de resolución – y por otra un programa o codificación.
Teoría de la computación DECIBILIDAD Equipo 4 Karla Flores Samuel rojas Filiberto Jiménez.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
2015-BM5A. ¿Qué estructuras de Programación conocemos? Condicional: If … { } … Else …{ } Condicional por Casos: Switch (opcion) { } Repetitiva exacta:
Periodo II Técnicas de programación. Sin Parámetros Con parámetros Funciones.
MATLAB 7 EJERCICIOS. E01. Escribir un programa que permita determinar si un número entero dado es par o impar. (Utilizar el operador mod) E02. Utilizando.
Introducción a la Programación Multimedial
Universidad autónoma del estado de México
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
Preparándonos para el tercer parcial
Diagrama de Flujo de Datos (DFD)
Estructuras de Control.
Funciones. Recursividad
Estructuras Repetitivas Estructuras Repetitivas
Árboles binarios. Algoritmos básicos
ME56A – Diseño de Elementos de Máquinas
Olimpiadas Chilenas de Informática - Formación
Programación Orientada a Objetos
RECURSIVIDAD.
Conceptos básicos de programación
Arreglos. en Lenguaje C n
Ejemplos con análisis y grafico
¿Cuándo usar esta distribución?
Sistemas de ecuaciones lineales
CAPÍTULO 9: DETECCIÓN DE LÍNEAS
Clase 7: Abreviaturas Valeria Herskovic –
Tema 08: Programación dinámica
Unidad 6. Capítulo IV. Puntos ordinarios y puntos singulares.
2.2 Procedimientos recursivos
Procedimientos y Funciones
2.1 POTENCIAS Y RADICALES.
PROGRAMACION LINEAL UNIVERSIDAD LIBRE 2016
Unidad 4. Capítulo IX. Búsqueda de Yp: Variación de parámetros.
DISTRIBUCIÓN MUESTRAL DE UNA MEDIA.
ALGORITMOS Y PSEUDOCÓDIGO
PROGRAMACIÓN 1 INTRODUCCIÓN
Estructuras de control Resolución de problemas y algoritmos
FunciÓn PotenciaL, exponencial y logarÍtmica.
Programación: paradigma estructurado Mgs Christian Rosado.
Tema 6 Clasificación de algoritmos
Tema 9. Estructuras de repetición. Clase 2
Fundamentos de la Programación I
FORMULACIÓN DE PROYECTOS
Metodología de la Programación
Curso de Programación Estructurada
BICONDICIONAL.
ESTRUCTURAS DE DATOS Docente: Ing. Yesika Medina
Recursividad Estructura de datos 2005.
Curso de Programación Estructurada
Fundamentos de Informática Especialidad de Electrónica –
Compendio por Eugenio Skerrett
Optimización de Procesos.
FUNCIONES Y PROCEDIMIENTOS
Estructuras de Control
MC Beatriz Beltrán Martínez Verano 2018
2/22/2019 SISTEMAS NO LINEALES.
2.  Diagramas de Estado.
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.
Nelson Baloian, José A. Pino
Introducción a la Computación Numérica
ProcesadorNumero PROBLEMA 1 (Laboratorio N°1)
Sentencias de control JAVA.
Programación Estructurada
CINEMÁTICA Movimiento Rectilíneo Uniforme (MRU)
Tema 8. Estructuras de decisión. Clases 1 y 2.
Recursividad.
KAREL Parámetros, Recursividad
Transcripción de la presentación:

Estructuras de Datos Recursividad

¿Qué es la recursividad? 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 a si mismos. 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. 2

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). La secuenciación, iteración condicional y selección son estructuras válidas de control que pueden ser consideradas como enunciados. NOTA: Regla recursiva Las estructuras de control que se pueden formar combinando de manera válida la secuenciación, iteración condicional y selección también son válidos.

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: El procedimiento se llama a sí mismo El problema se resuelve, resolviendo el mismo problema pero de tamaño menor La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará

Ejemplo: factorial (iterativo) public int factorial (int n) { int fact = 1; for (int i = 1; i <= n; i++) fact *= i; return fact; } 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 public int factorial (int n) { if n == 0 return 1; else return factorial (n-1) * n; }

Ejemplo: A continuaciòn se puede ver la secuencia de factoriales. 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 ... N! = = 1 * 1 = 1 * 0! = 2 * 1 = 2 * 1! = 3 * 2 = 3 * 2! = 4 * 6 = 4 * 3! = 5 * 24 = 5 * 4! = N * (N – 1)!

Solución Recursiva Dado un entero no negativo x, regresar el factorial de x fact: Entrada n entero no nogativo, Salida:entero. int fact (int n) { if (n == 0) return 1; else return fact(n – 1) * n ; } 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.

Ejercicio Considere la siguiente ecuación recurrente: an = an-1 + 2n   an = an-1 + 2n a0 = 1 Escribe el algoritmo de la solución.

¿Cuándo usar 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. ¿Cuándo no usar recursividad?

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

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.

Recursión vs. iteración Repetición Iteración: ciclo explícito 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 elección entre eficiencia (iteración) o una buena ingeniería de software, La recursión resulta normalmente más natural.

Otros Ejemplos de recursividad: Inversión de una cadena estática Cad invierte (Cad cadena, int limIzq, int limDer) si limDer = limIzq entonces regresa cadena sino regresa invierte (cadena, limDer, limIzq+1) + cadena [limIzq] fin

Trampas sutiles: Código ineficiente. public int fib (int n) { int f1 = 1, f2 = 1, nuevo; while (n > 2) nuevo = f1 + f2; f1 = f2; f2 = nuevo; n--; } return f2; public int fib (int n) { if (n < 2) return 1; else return fib (n-2) + fib ( n-1); } fib (100) toma tan sólo unos microsegundos en dar el resultado fib (100) toma 50 años en dar el resultado

Búsqueda Binaria (buscar un valor en un arreglo) estática bool busbin (int[ ] A, int limIzq, int limDer, objeto valor) si limIzq = limDer entonces regresa A[limDer]== (valor) Sino m  (limIzq + limDer) / 2 si A[m]==(valor)entonces regresa verdadero sino si valor > (A[m]) entonces regresa BusBin (A,m+1,limDer, valor) sino regresa BusBin (A,limIzq,m-1, valor) fin