Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

Documentos relacionados
Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

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

dit UPM Tema 1: Introducción /recursión Análisis y diseño de software José A. Mañas

Programación 2. Lección 3. Introducción a la recursividad

Complejidad de algoritmos recursivos

Estructuras de Datos. 14 de junio de Apellidos

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

Trabajo Práctico Nº 06

Algoritmos y Estructuras de Datos. Guillermo Román Díez

Programación de sistemas Recursión

Qué es la recursividad?

Programación de sistemas

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Análisis de algoritmos. Recursividad

Manos a la obra: Recursión, división y listas

Programación Unidad 5. Recursividad. Programación TIG - TUP 1. Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA

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

Estructuras de datos Solemne 2

Recursividad. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Técnicas de prueba y corrección de algoritmos

Recursividad Definición

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

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

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

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Temario. Tipos de recursión. Eficiencia y recursión

Trabajo Práctico Nº 13 Tema: RECURSIVIDAD

Programación I Recursividad.

Algoritmos y Estructuras de Datos Pilas LIFO y Colas FIFO. Guillermo Román Díez

ESTRUCTURA DE DATOS: Tema 3. Recursividad

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

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

M.C. Yolanada Moyao Martínez

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Tema 1. Recursividad

Recursión. Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Recursión / 1

Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Recursión / 1

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

Tema 6: Funciones recursivas

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Estructura de Datos. Recursividad. Primer Semestre, Indice

Versión Iterativa de recuperar en un. Soluciones Ejercicios Tema 11. protected NodoABB<E> recuperarmax(nodoabb<e> n) { while (n.der!= null) n = n.

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

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

Tema 7: Árbol Binario

Tema 7: Recursividad

Capítulo 3 Algoritmos recursivos

Programación II Arboles Binarios(AB)

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

PROGRAMACION ALGORITMOS Y ESTRUCTURAS DE DATOS PRACTICA N 4

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

Práctica 5.- Recursividad

Aritmética en Haskell

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

MEL* Ejercicios - Inducción 1

EDA. Tema 8 Colas de Prioridad: Heaps

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Fundamentos de la programación

4.1 Definición. Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. Un objeto (problemas, estructuras de datos) es

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Pilas Motivación

Tecnología de la Programación

Estructuras de Datos Clase 6 Listas e Iteradores (primera parte)

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

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

Estructuras de datos Solemne 2

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

ESTRUCTURA DE DATOS: Tema 3. Recursividad

Recursión. Recursión continuación

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Representaciones de árboles

Secuencias Calculadas

Alonso Ramírez Manzanares Computación y Algoritmos 10.03

Roberto Carlos Abreu Díaz. October 28, 2009

Estructuras de Datos Clase 4 Pilas y colas

Recursividad. 1.1 Concepto de Recursividad. Objetivos. Metodología de la Programación II Entender el concepto de recursividad.

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

Ejercicio 1 (proyecto prlistas, paquete listas)

Soluciones a los ejercicios planteados en el curso

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Estructuras de Datos Dinámicas: Listas

Árbol ABB equilibrado. Lección: Árboles. Algorítmica II (Tema 4) Lenguajes y Sistemas Informáticos, Universidad Pablo de Olavide 1/ 58

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Valentín Moreno Programación en FORTRAN ESQUEMA DE SELECCIÓN

Programación de sistemas Árboles

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

Funciones recursivas

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

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

1. Una pila funciona según el método LIFO (Last In First Out ). Se define la clase Pila de la siguiente forma:

Programación Estructuras Arborescentes

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Funciones recursivas

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Transcripción:

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción 1/12

Métodos Recursivos Pregunta Qué es un método recursivo? Un método recursivo es un método que se invoca a sí mismo El ejemplo típico es el factorial(n) factorial(n) se calcula n (n 1) (n 2) (n 3)... 1 Observad que la expresión (n 1) (n 2) (n 3)... 1 es el factorial(n 1) n * (n -1) * (n -2) *... * 1 \ / factorial (n -1) \ / factorial ( n) factorial ( n) = n * factorial (n -1) Guillermo Román, UPM AED: Introducción 2/12

Recursión: Factorial Ejercicio Escribir una versión iterativa y otra recursiva de factorial(n) Versión Iterativa int factorial ( int n) { int r = 1; while (n > 1) { r = n * r; n - -; return r; Versión Recursiva int factorial ( int n){ if (n <= 1) return 1; return n* factorial (n -1) ; Cualquier programa iterativo tiene uno equivalente recursivo y viceversa Llamarse recursivamente es una forma de iterar Guillermo Román, UPM AED: Introducción 3/12

Ejemplo de Ejecución Ejercicio Dibujar la ejecución recursiva de factorial(4) factorial (4) 4 * factorial (3) 4 * 3 * factorial (2) 4 * 3 * 2 * factorial (1) 4 * 3 * 2 * 1 4 * 3 * 2 4 * 6 24 Vemos que las llamadas recursivas se van apilando Hasta llegar al caso base que se van resolviendo hasta llegar a la primera llamada Guillermo Román, UPM AED: Introducción 4/12

Recursión de Cola La recursión se suele implementar utilizando la pila de la memoria Se puede implementar a estilo paso de continuaciones dejando recursión de cola Para esto pasamos un parámetro extra sobre el que vamos acumulando el resultado La llamada recursiva sería el último mandato del programa Recursión normal int factorial ( int n){ if (n <= 1) return 1; return n* factorial (n -1) ; Recursión de Cola int factorial ( int r,int n){ if (n <= 1) return r; return factorial (n*r,n -1) ; Guillermo Román, UPM AED: Introducción 5/12

Errores Comunes La función debe tener uno o más casos base (no recursivos) public int factorial ( int n) { return n * factorial (n -1) ; // no hay caso base Debe haber un orden bien fundado en los valores de los argumentos Las llamadas recursivas se realizan sobre valores anteriores y eventualmente se llega a alguno de los casos base public int factorial ( int n) { if (n == 1) return 1; return n * factorial (n -2) ; // no llega al caso base Guillermo Román, UPM AED: Introducción 6/12

Recursión Vs. Inducción La recursión es el reverso de la inducción Podemos demostrar que factorial(n) = n (n 1)... 1 para todo n > 0. Caso base: factorial(1) = 1 Hipótesis de inducción: factorial(n) = n (n 1)... 1 Demostramos que se cumple factorial(n + 1) = (n + 1) n (n 1)... 1 factorial (n +1) = { por la definicion de factorial con n > 0 (n +1) * factorial ((n+1) -1) = { aritmetica (n +1) * factorial (n) = { por la hipotesis de induccion factorial (n) = n * (n -1) *... * 1 (n +1) * n * (n -1) *... * 1 Guillermo Román, UPM AED: Introducción 7/12

Ejemplo: Máximo Común Divisor Ejercicio Función que calcule el Máximo Común Divisor Versión Iterativa int mcd ( int n, int m) { while (m!= 0) { int tmp = m; m = n % m; n = tmp ; return n; Versión Recursiva int mcd ( int n, int m) { if (m == 0) return n; return mcd (m, n % m); Guillermo Román, UPM AED: Introducción 8/12

Ejemplo: Fibonacci Ejercicio Función que calcule el n-ésimo elemento de la sucesión de Fibonacci public static int fib ( int n) { if ( n < 0) return 0; if ( n <= 1) return n; /* dos casos base */ return fib (n -1) + fib (n -2) ; Guillermo Román, UPM AED: Introducción 9/12

Búsqueda Binaria Ejercicio Implementar de forma iterativa el algoritmo de búsqueda binaria sobre un vector ordenado public boolean member ( int elem, int [] arr ) { if ( arr == null arr. length == 0 elem < arr [0] elem > arr [ arr. length - 1]) return false ; int start = 0; int end = arr. length - 1; int m; while ( start <= end && arr [( m = ( start + end ) / 2)]!= elem ) { if ( elem < arr [m]) end = m -1; start = m +1; // start > end start <= end && arr [ m] == elem return start <= end ; Guillermo Román, UPM AED: Introducción 10/12

Búsqueda Binaria: Recursiva Es necesario un método auxiliar que lleve la cuenta del rango en el que estamos buscando [start end] public static boolean member ( int elem, int [] arr ) { if ( elem < arr [0] elem > arr [ arr. length - 1]) return false ; return memberrec ( elem, arr, 0, arr. length -1) ; private static boolean memberrec ( int elem, int [] arr, int start, int end ) { if ( start > end ) return false ; /* caso base */ int m = ( start + end ) / 2; if ( elem == arr [ m]) return true ; /* caso base */ if ( elem < arr [m]) return memberrec (elem,arr, start,m -1) ; return memberrec (elem,arr,m+1, end ); Guillermo Román, UPM AED: Introducción 11/12

Recursión sobre Listas de Posiciones Las listas de posiciones se pueden definir de forma recursiva Como una secuencia de nodos que, o bien es vacía, o está formada por un nodo seguido por una secuencia de nodos Podemos definir métodos recursivos para explotar esta definición public static <E > void show ( PositionList <E > list ) { if ( list!= null ) showrec (list, list. first ()); private static <E > void showrec ( PositionList <E > list, Position <E > cursor ) { if ( cursor!= null ) { System. out. println ( cursor. element ()); showrec (list, list. next ( cursor )); Guillermo Román, UPM AED: Introducción 12/12