Análisis de algoritmos. Recursividad

Documentos relacionados
Tema 06: Recursividad

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Programación I Recursividad.

Complejidad de algoritmos recursivos

Recursividad Definición

Recursividad. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Programación II Recursividad Dr. Mario Rossainz López

Una Introducción a la Programación Estructurada en C

ESTRUCTURA DE DATOS: Tema 3. Recursividad

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Tema: Programación Dinámica.

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Divide & Conquer. Herman Schinca. Clase de Junio de 2011

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Tema 9. Recursividad

Recursividad... un análisis posterior. Aurelio Sanabria Introducción a la programación

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Tema: Funciones, Procedimientos y Recursividad en C#.

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO INGENIERÍA EN COMPUTACIÓN

Tema: Funciones, Procedimientos y Recursividad en C#.

Funciones recursivas

Programación Estructurada. Complementos de Informática Tema 2: Programación Estructurada y Programación Modular. Números Amigos

RECURRENCIA RECURSIÓN o RECURSIVIDAD

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Tema: Programación Dinámica.

UAA Sistemas Electrónicos Estructura de Datos Muñoz / Serna

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Estructura de Datos. Complejidad de Algoritmos. Algoritmo. Algoritmo. Mauricio Solar Lorna Figueroa

TEMA 5: Subprogramas, programación modular

Recursión Directa. Una función es de recursión directa si contiene una llamada explícita a si misma. return foo (y 1); Recursión Indirecta

Funciones Tipos de funciones y Recursividad

Recursividad. Definición. Diseño de Algoritmos Recursivos

Subrutinas. Subrutinas. Erwin Meza Vega

Recursión. Capítulo 4

Estrategias de Diseño de Algoritmos

Bloque 1. Conceptos y técnicas básicas en programación

Tema 7: Recursividad

Tecnología de la Programación

Luis Rodríguez Baena Universidad Pontificia de Salamanca Escuela Superior de Ingeniería y Arquitectura

TEMA 1. Recursividad. Recursividad CONTENIDO DEL TEMA

Introducción a la programación en C eme - Escuela Universitaria de Música

Capítulo 3 Algoritmos recursivos

Programación Dinámica

Tema 4.- Recursión e iteración

Recursividad. Figura 1. Cálculo del factorial de un número determinado.

PROGRAMACION ESTRUCTURADA: Tema 3. Funciones

Si un número es múltiplo de otro, u dicho de forma, comprobar si un número es divisor de otro.

Introducción a los Computadores Funciones y recursividad en C

1. Los objetos conocidos, es decir, aquellos objetos de los cuales poseemos información total o parcial útil en la búsqueda de los objetos desconocido

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Resolución de Problemas

CI 2125, Computación I

Análisis de algoritmos

Recursividad. Introducción a la programación

Ejercicios sobre recursividad

Inteligencia Artificial: Prolog

Métodos CON valor de retorno

Ámbito y Funciones. Lenguaje de Programación Estructurado. Siempre imaginé el Paraíso como algún tipo de biblioteca.

Guía práctica de estudio 03: Algoritmos

Programación modular y recursiva

TEMA 1: Algoritmos y programas

RECURSION. Se deben hacer cuatro preguntas para construir una solución recursiva:

Computación I Curso Facultad de Ingeniería Universidad de la República

Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos

Programación Dinámica

Guía práctica de estudio 03: Algoritmos

ANEXO XVII DE LA RESOLUCION N

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Modularización en lenguaje C. Funciones

Algorítmica y Complejidad. Tema 5 Divide y Vencerás.

Bloque 1. Conceptos y técnicas básicas en programación

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

Estructura de datos y de la información Boletín de problemas - Tema 9

Carlos A. Rivera-Morales. Precálculo 2

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

Examen de Repetición. Lenguajes de Programación

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

FACULTAD DE INGENIERIA

Para entender la recursividad primero tenemos que entender la recursividad

Funciones: Pasos por Referencia Recursividad

Práctica 2 - Ejercicio 2.8

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Algoritmos de Ordenación

Mgter. Oscar Adolfo Vallejos FaCENA - UNNE

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Tema: Funciones y Procedimientos en C#.

Análisis y Diseño de Algoritmos

Matemáticas Discretas L. Enrique Sucar INAOE. Inducción y Recursión

Alonso Ramírez Manzanares Computación y Algoritmos 10.03

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Algoritmos glotones. mat-151

Universidad Nacional de Ingeniería Facultad de Ciencias Introducción a la Ciencia de la Computación Algoritmos Prof: J.

Práctica : Creación y uso de métodos

Mientras (expresión lógica) Instrucciones a repetir mientras la expresión lógica es verdadera Fin Mientras

A = A n. = {a n. Georges E. Alfaro Salazar 1

PROGRAMACION MODULAR FUNCIONES

Tema 2. Divide y vencerás.

Transcripción:

Análisis de algoritmos Recursividad 1

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 alcanzará 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) comienza fact 1 para i 1 hasta n fact i * fact regresa fact termina public int factorial (int n) { int fact = 1; for (int i = 1; i <= n; i++) fact = i * fact; return fact; } 7

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; } 8

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 * 1 = 3 * 2! = 4 * 3 * 2 * 1 = 4 * 3! = 5 * 4 * 3 * 2 * 1 = 5 * 4! = N * (N 1)! 9

Solución Aquí podemos ver la secuencia que toma el factorial N! = 1 si N = 0 (base) N * (N 1)! si N > 0 (recursión) Un razonamiento recursivo tiene dos partes: la base y la regla recursiva de construcción. La base no es recursiva y es el punto tanto de partida como de terminación de la definición. 10

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 ; } 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. 11

Cómo funciona la recursividad? Llamadas recursivas Resultados de las llamadas recursivas 12

Cómo funciona la recursividad? 13

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. 14

Factible de utilizar recursividad Para simplificar el código. Cuando la estructura de datos es recursiva ejemplo : árboles. No factible utilizar 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. 15

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. 16

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) public static int fib(int n){ if (n <= 1) return n; else return fib(n-1)+fib(n-2); //condición base //condición recursiva } 17

Ejemplo: Serie de Fibonacci Traza del cálculo recursivo Fib(3) return Fib(2) + Fib(1) return Fib(1) + Fib(0) return 1 return 1 return 0 18

19

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. 20

Dividir para vencer Muchas veces es posible dividir un problema en subproblemas más pequeños, generalmente del mismo tamaño, resolver los subproblemas y entonces combinar sus soluciones para obtener la solución del problema original. Dividir para vencer es una técnica natural para las estructuras de datos, ya que por definición están compuestas por piezas. Cuando una estructura de tamaño finito se divide, las últimas piezas ya no podrán ser divididas. 21