Slides:



Advertisements
Presentaciones similares
Relaciones de recurrencia
Advertisements

Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
ESTRUCTURA DE DATOS Unidad 01 RECURSIVIDAD.
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Programación II Recursividad
Introducción a los Algoritmos
¿ Que es la complejidad de un algoritmo ?
Funciones. Programación, Algoritmos y Estructuras de Datos.
1.3 Programación modular. Subprogramas.
UNIVERSIDAD LATINA (UNILA) II.- ANALISIS DE ALGORITMOS
17/09/2014Catedra de Programacion I1 Programación I Funciones.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
2.1 Recursividad El hecho de que una función pueda llamarse a sí misma.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
2 Acciones y funciones 2.1 Concepto
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad
FUNCIONES Y PROCEDIMIENTOS
Tema 6: Clases Antonio J. Sierra.
Programación de Computadores
Semana 5 Subprogramas..
Funciones y Procedimientos(Pseudocódigo)
Introducción al análisis de algoritmos
Algoritmos.
Facultad de Ciencias de la Computación MC Beatriz Beltrán Martínez
Capítulo 1 “Elementos de Programación”

Teoría de Probabilidad
(Organización y Manejo de Archivos)
Descomposición Factorial Unidad 5
Fundamentos de Programación
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Recurrencia Programación II de enero de 2009.
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Recursividad.

Estructuras de Control.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Sentencias de repetición
Parte I. Estructuras de Datos.
Análisis de Algoritmos
Recursividad Un objeto se dice que es recursivo si él mismo forma parte de su definición. Ejemplos de objetos recursivos: Una locomotora es un tren Un.

Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Programación Procedural y Recursiva en C++
COMPUTACIÓN I TEMA 5. Subprogramas o funciones. Alcance de variables
Conceptos Avanzados de Programación
Ecuaciones Algebraicas
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -10-
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Unidad V Recursión. Objetivos del Aprendizaje Explicar el concepto de recursión. Discutir las diferentes condiciones que deben ser satisfechas para que.
Conalep Coacalco Algoritmos Recursivos
Introducción a los TADs
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de.
Introducción a la abstracción de datos MC Beatriz Beltrán Martínez Primavera 2015.
Solución a Ecuaciones de Recurrencia Dr. Rogelio Dávila Pérez División de Posgrado Universidad Autónoma de Guadalajara
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Recursividad.
MC Beatriz Beltrán Martínez Verano 2018
Transcripción de la presentación:

MC Beatriz Beltrán Martínez Primavera 2014 Recursión MC Beatriz Beltrán Martínez Primavera 2014

Introducción Una función recursiva es aquella que se llama a sí misma. La recursividad es una alternativa a la repetición o iteración. En tiempo de computadora y ocupación de memoria, la solución recursiva es menos eficiente que la iterativa, existen situaciones en las que la recursividad es una solución simple y natural a un problema que en otro caso será difícil de resolver FCC - BUAP Primavera 2014 BBM

Definición de un método recursivo La característica principal de la recursividad es que siempre existe un medio de salir de la definición (caso base o salida), y la segunda condición (llamado recursivo) es propiamente donde se llama a sí misma. Una función recursiva simple en Java es:   public void infinito () { infinito (); } FCC - BUAP Primavera 2014 BBM

Definición De manera más formal, una función recursiva es invocada para solucionar un problema y dicha función sabe cómo resolver los casos más sencillo (casos bases). Donde si la función es llamada desde un caso base, ésta simplemente devuelve el resultado. Si es llamada mediante un problema más complejo, la función lo divide en dos partes conceptuales: una parte de dicha función sabe resolver y otra que no sabe resolver. FCC - BUAP Primavera 2014 BBM

Definición Además esta segunda parte debe parecerse al problema en sí; para tener la recursividad; pero debe ser más simple. Debido a que se parece a la original la función lanza una copia de ella misma, que se encargará del problema más sencillo (llamado recursivo o paso de recursión). En esta parte se tendrá la devolución de un valor que era desconocido inicialmente. FCC - BUAP Primavera 2014 BBM

Ejemplo con recursividad El factorial de un entero no negativo n, esta definido como: n! = n * (n-1) * (n-2) * … *2 *1 Donde 1! es igual a 1 y 0! se define como 1. El factorial de un entero k puede calcularse de manera iterativa como sigue: fact = 1;   for (int i = k; i>=1; i--) fact *= i; FCC - BUAP Primavera 2014 BBM

Ejemplo con recursividad Ahora de manera recursiva se puede definir el factorial como: Donde el caso base es: 1 Si n = 0, n=1. El caso general es: n * (n-1)! Si n > 1. Por ejemplo si se quiere calcular el factorial de 5, se tendría: 5! = 5*4*3*2*1 5! = 5*(4*3*2*1) 5! = 5*4! FCC - BUAP Primavera 2014 BBM

Ejemplo con recursividad Valor devuelto 120 5! FCC - BUAP Primavera 2014 5! Se devuelve 5!=5*24=120 5* 4! 5* 4! Se devuelve 4!=4*6=24 4* 3! 4* 3! Se devuelve 3!=3*2=6 3* 2! BBM 3* 2! Se devuelve 2!=2*1=2 2* 1! 2* 1! Se devuelve 1 1 1

Ejemplo con recursividad Caso base: Es el caso más simple de una función recursiva, y simplemente devuelve un resultado (el caso base se puede considerar como una salida no recursiva). Caso general: Relaciona el resultado del algoritmo con resultados de casos más simples. Dado que cada caso de problema aparenta o se ve similar al problema original, la función llama una copia nueva de si misma, para que empiece a trabajar sobre el problema más pequeño y esto se conoce como una llamada recursiva y también se llama el paso de recursión. FCC - BUAP Primavera 2014 BBM

Método Obtener una definición exacta del problema a resolver. (Esto, por supuesto, es el primer paso en la resolución de cualquier problema de programación). A continuación, determinar el tamaño del problema completo que hay que resolver. Este tamaño determinará los valores de los parámetros en la llamada inicial a la función. Resolver el caso base en el que el problema puede expresarse no recursivamente. Por último, resolver el caso general correctamente en términos de un caso más pequeño del mismo problema, una llamada recursiva. FCC - BUAP Primavera 2014 BBM

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 2014 BBM

Tipos de recursión Recursividad anidada: En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. Ackerman 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 2014 BBM

Tipos de recursión Ejemplo: Par o Impar int par(int nump) { if (nump==0) return(1); return( impar(nump-1)); } int impar (int numi) { if(numi==0) return(0); return( par(numi-1)); } FCC - BUAP Primavera 2014 BBM

Recursión vs. Iteración Las principales cuestiones son la claridad y la eficiencia de la solución. En general: Una solución no recursiva es más eficiente en términos de tiempo y espacio de computadora. La solución recursiva puede requerir gastos considerables, y deben guardarse copias de variables locales y temporales. Aunque el gasto de una llamada a una función recursiva no es peor, esta llamada original puede ocultar muchas capas de llamadas recursivas internas. El sistema puede no tener suficiente espacio para ejecutar una solución recursiva de algunos problemas. FCC - BUAP Primavera 2014 BBM

Recursión vs. Iteración Una solución recursiva particular puede tener una ineficiencia inherente. Tal ineficiencia no es debida a la elección de la implementación del algoritmo; más bien, es un defecto del algoritmo en si mismo. Un problema inherente es que algunos valores son calculados una y otra vez causando que la capacidad de la computadora se exceda antes de obtener una respuesta. La cuestión de la claridad en la solución es, no obstante, un factor importante. En algunos casos una solución recursiva es más simple y más natural de escribir. FCC - BUAP Primavera 2014 BBM