MC Beatriz Beltrán Martínez Verano 2018

Slides:



Advertisements
Presentaciones similares

Advertisements

Análisis de algoritmos
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.
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.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
LÍMITES Y CONTINUIDAD IVºELECTIVO
Estructuras de Control.
Actividad #2 Los algoritmos
Funciones. Recursividad
Unidad 2 Capítulo I Descripción general
Olimpiadas Chilenas de Informática - Formación
Programación Orientada a Objetos
Métodos y parámetros.
Funciones o Señales Singulares
RECURSIVIDAD.
Fundamentos de programación
Métodos en Java.
Estructuras de Datos Recursividad.
Introducción a los algoritmos
Elaboración del formulario
Programación I MC Beatriz Beltrán Martínez
Introducción a la Programación
CAPÍTULO 9: DETECCIÓN DE LÍNEAS
Unidad 4. Capítulo VIII. Ecuaciones no homogéneas.
Unidad 2 Capítulo VI Ecuaciones de factor integrante
2.2 Procedimientos recursivos
Infografía. Estructura de Datos.
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
Procedimientos y Funciones
3.1 AREAS.
PROGRAMACION LINEAL UNIVERSIDAD LIBRE 2016
Fundamentos de programación
Unidad 4. Capítulo IX. Búsqueda de Yp: Variación de parámetros.
ALGORITMOS Un procedimiento o método para resolver un problema que cumpla con unos requisitos se dice que es un algoritmo. Se puede dar por tanto la siguiente.
Estructuras de control en PHP
La Gestión y el Control de Procesos
PROGRAMACIÓN 1 INTRODUCCIÓN
Curso de iniciación al trabajo con MatLab 7.0
Estructuras de control Resolución de problemas y algoritmos
CONCEPTOS MATEMATICOS BASICOS I
FunciÓn PotenciaL, exponencial y logarÍtmica.
Programación: paradigma estructurado Mgs Christian Rosado.
Fundamentos de programación
LENGUAJE C.
Tipos de Datos abstractos
Metodología de la Programación
Tema 5 Representación y Técnicas de Diseño de Algoritmos
Funciones y Procedimientos(Pseudocódigo)
Introducción a los algoritmos
METODOS PARA ANALISIS DE TALUDES
Recursividad Estructura de datos 2005.
Sea la ecuación diferencial lineal de orden “n” y de coeficientes variables
Tipos de Datos abstractos
Estructuras de Datos Dinámicas
Fundamentos de Informática Especialidad de Electrónica –
Metodología de la Programación
Docente: Ing. Francisco Rodríguez
Introducción a la Estadística Informática
FUNCIONES Y PROCEDIMIENTOS
Resolución interactiva del Simplex
CICLOS EN JAVA FOR, WHILE, DO WHILE Un ciclo en Java o bucle en Java (como prefieras llamarlo) permite repetir una o varias instrucciones cuantas veces.
2/22/2019 SISTEMAS NO LINEALES.
MATRIZ DE CHEQUEO DE PARIDAD
Eduardo Cruz Pérez.
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
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
Arreglos Bidimensionales
UNIDAD VII FUNCIONES (SUBPROCESOS)
Transcripción de la presentación:

MC Beatriz Beltrán Martínez Verano 2018 Recursión MC Beatriz Beltrán Martínez Verano 2018

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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 BBM

Ejemplo con recursividad Ahora de manera recursiva se puede definir el factorial como: Donde el caso base es: 1 Si n = 0. El caso general es: n * (n-1)! Si n > 0. 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 Verano 2018 BBM

Ejemplo con recursividad Valor devuelto 120 5! FCC - BUAP Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 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 Verano 2018 BBM