Programación I Teoría VI: Recursividad

Slides:



Advertisements
Presentaciones similares
Métodos y parámetros.
Advertisements

Paso 1 Portada YO SOY EUROPEO Comisión Europea.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
INTELIGENCIA ARTIFICIAL
Complejidad Computacional
Complejidad Computacional
Cuestiones y problemas
ESTRUCTURA DE DATOS Unidad 01 RECURSIVIDAD.
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Funciones: límites y continuidad
Funciones Continuas. Contenidos Definición de Continuidad Funciones Discontinuas Teoremas Ejemplos.
Programación en C para electrónica
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Programación I Teoría I
Programación I Teoría III
Programación I Teoría IV
Direcciones, Arreglos y Argumentos de Funciones
Funciones. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
Ecuaciones y Resolución de Ecuaciones Lineales
Desigualdades Lineales y Compuestas
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Combinadores SK.
FUNCIONES EN C.
INFORMATICA I Arreglos 1 CLASE 17.
INFORMATICA I Funciones CLASE 13.
Comité Nacional de Información Bogotá, Julio 21 de 2011 Consejo Nacional de Operación de Gas Natural 1 ESTADISTICAS NACIONALES DE OFERTA Y DEMANDA DE GAS.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
1.3 Programación modular. Subprogramas.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Programación Estructurada
Programación Orientada a Objetos en Java
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
17/09/2014Catedra de Programacion I1 Programación I Funciones.
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
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.
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 II
Programación Orientada a Objetos usando C++
Estructuras de Control
Material de apoyo Unidad 2 Estructura de datos
POO Java Módulo 3 Elementos de programas Identificadores
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
LENGUAJE “C” Programación.
Semana 5 Subprogramas..
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.

Descomposición Modular. Funciones
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Recursividad.
Estructuras de Control.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Funciones Definidas por el Programador
Conceptos Avanzados de Programación
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -10-
LENGUAJE “C” Programación.
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.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Recursividad.
Transcripción de la presentación:

Programación I Teoría VI: Recursividad http://proguno.unsl.edu.ar proguno@unsl.edu.ar

Recursividad Técnica de resolución de problemas particulares. La definición de un concepto es recursiva si el concepto es definido en términos de sí mismo. Ejemplos: Definición de la función factorial. Definición de los números naturales. …

Definiciones recursivas En una definición recursiva, en general, distinguimos dos partes: Uno o más casos base o elementales. Definición recursiva o caso general.

Recursividad en Computación Se encuentra presente en: Definiciones recursivas de módulos. Definiciones recursivas de datos. La mayor parte de los lenguajes de programación soportan la recursividad. Es otra técnica para realizar repeticiones. Aunque no siempre sea la mas adecuada.

Definiciones recursivas de módulos Un módulo (función en C) es recursivo cuando: En su cuerpo existe al menos una invocación a sí mismo (caso recursivo o general). Existe uno o varios casos de menor tamaño que pueden resolverse directamente sin necesidad de recursión (caso(s) base(s)).

Ejemplo I: Factorial Definición matemática de la función factorial Definición de la función factorial en C !: ℕ0  ℕ n  (n-1)!, n > 0 n! = 1, n = 0 long factorial(int n){ if (n == 0) return 1; else return n * factorial(n-1); }

Ejemplo I: Factorial printf("%ld \n", factorial(2));

Ejemplo II: Sucesión de Fibonacci f0 = 0 caso base f1 = 1 caso base fn = fn–1 + fn–2 caso general

Ejemplo II: Sucesión de Fibonacci

Tipos de Recursividad Lineal vs. Múltiple Lineal: existe una única invocación recursiva. Múltiple: existe más de una invocación recursiva. Anidada: dentro de una invocación recursiva ocurre como parámetro otra invocación recursiva. int ackerman(int n, int m){ if (n == 0) return m + 1; else if(m == 0) return ackerman(n - 1, 1); return ackerman(n - 1, ackerman(n, m - 1)); }

Tipos de Recursividad Directa vs. Indirecta. Directa: el módulo recursivo se llama a sí mismo. Indirecta: se tienen varios módulos que se llaman unos a otros formando un ciclo. función A  función B  función A … función A  función B  función C  función D  función A … Ejemplo: funciones par e impar: n es par si n − 1 es impar, n es impar si n − 1 es par, 0 es par

Stack de Ejecución Mantiene la información del estado de ejecución de cada módulo invocado en un programa. Guarda los registros de activación de los módulos invocados.

Stack de Ejecución Variables locales de función Y . . . . Variables locales de función Y Dirección de retorno Parámetros de Y Variables locales de función X Parámetros de X Registro de activación para función Y Registro de activación para función X Tope del Stack de Ejecución

Registros de Activación Un registro de activación de un módulo almacena el Ambiente (variables locales, dirección de retorno, etc.) de un módulo. En el tope del stack de ejecución se encuentra el registro de activación del módulo que se está ejecutando. Por debajo, los registros de activación de aquellos cuya ejecución aún está pendiente de finalizar.

EJEMPLO int funcion1(int a){ int b; b = funcion2(a+6); return a + b; } int funcion2 (int c){ return c - 3; int main() { int b = 3; printf(“%d”,b + funcion1(43)); printf(“Fin");

Profundidad de la Recursión Número máximo de registros de activación en el stack de ejecución para una entrada de datos dada.

Ejemplo Función que imprime los elementos de una lista de enteros (haciendo uso del TDA list_of-int).

void imprimeLista(list_of_char lis) { if (!isOos(lis)){ printf("elemento: %c\n", copy(lis)); forwards(&lis); imprimeLista(lis); }

Casos particulares Inicialización (p.e. reset) Condición dentro de módulo  Usar variables globales  Módulos anidados (si lo permite el lenguaje)  Antes de la invocación 

Casos particulares Actualización de valores entre llamadas (p.e. imprimir lista y posiciones) Usar variables globales  Usar parámetros extras para pasar valores 

Ventajas e Inconvenientes de la Recursividad Permite definir un conjunto potencialmente infinito de objetos por medio de una expresión finita.  Los algoritmos o soluciones recursivas son útiles, particularmente, cuando existe una definición recursiva.  Solución compacta. Adaptadas en forma directa a la definición del problema.

Ventajas e Inconvenientes de la Recursividad Consumo de tiempo y espacio (creación y destrucción de registros de activación en el stack de ejecución).  No contribuye a hacer equivalentes las estructuras estática y dinámica del programa . Dificulta la depuración del código. Oculta las iteraciones.