Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Advertisements

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.
2.1 Recursividad El hecho de que una función pueda llamarse a sí misma.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.

Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Conceptos Avanzados de Programación
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.
Unidad V Recursión. Objetivos del Aprendizaje Explicar el concepto de recursión. Discutir las diferentes condiciones que deben ser satisfechas para que.
Algoritmo.
Recursividad.
Análisis de los algoritmos Unidad 7. Análisis La resolución práctica de un problema – algoritmo o método de resolución – y por otra un programa o codificación.
LENGUAJE C. El lenguaje de programación C  El C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell  Evolución.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Figure: Algoritmos. Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Estructuras de Control.
Funciones. Recursividad
Optimización: Programación Lineal
Programación en C - manejo de Archivos
Todo archivo se guarda en el disco duro con extensión .py
RECURSIVIDAD.
Unidad 5. Capítulo VI. Sistemas lineales no homogéneos.
FUNCIONES Y PROCEDIMIENTOS
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
La operación inversa de la potenciación
Estructuras de Datos Recursividad.
Complejidad Programación II de febrero de 2009.
5. Fundamentos de algoritmos
Recursividad Programación II Recursividad.
Figure: Algoritmos.
ESTRUCTURAS DE CONTROL REPETITIVAS
TUTORIAL PSeint.
Unidad 6. Capítulo IV. Puntos ordinarios y puntos singulares.
CREAR DIAGRAMA DE FLUJO
2.2 Procedimientos recursivos
ALGORITMOS. IFE 115: INFORMÁTICA BÁSICA Lic. Marcio Rodas
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
Aplicaciones de RECURSIVIDAD
IFE 115: INFORMÁTICA BÁSICA
Estructuras de control Resolución de problemas y algoritmos
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
PROGRAMACION: Que es un computador: Es un aparato electrónico que tiene el fin de recibir y procesar datos para realización de diversas operaciones..
Programación: paradigma estructurado Mgs Christian Rosado.
Recursividad Estructura de datos 2005.
1 Números Índice del libro Los números reales
Curso de Programación Estructurada
Docente: Ing. Francisco Rodríguez
LENGUAJE “C” Programación.
Eficiencia de un Algoritmo  El análisis de algoritmos estudia desde el punto de vista teórico los recursos computacionales que necesita un programa para.
MATEMATICAS APLICADAS A LAS CCSS-II DEPARTAMENTO DE MATEMÁTICAS
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.
MC Beatriz Beltrán Martínez Verano 2018
TUTORIAL PS EINT FUNDAMENTOS DE PROGRAMACIÓN Ing. Elizabeth Díaz Orea.
METODOS DE ORDENAMIENTO CHRISTIAN MICHAEL OBANDO GARCES JOAO ADRIAN BARIONUEVO.
TUTORIAL PS EINT FUNDAMENTOS DE PROGRAMACIÓN Ing. Elizabeth Díaz Orea.
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.
Tema 2 Estructura de un programa en C. IWI Tema 2 Programa en C U n programa en C es una serie de instrucciones en un lenguaje muy especifico (similar.
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
CONTROLES Y ESTRUCTURAS BÁSICAS DE PROGRAMACIÓN  1. Algoritmos: conjunto de instrucciones programadas para resolver una tarea específica.  2. Datos:
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
CIRCUITOS DIGITALES Profesor: Elmer Hugo Arellanos Tafur Unidad : 2 Semana : 7 Sesión : 12 Semestre: I.
Diseñas y elaboras algoritmos para la solución de problemas
Estrategia algorítmica
FIGURE: Algoritmos. CONCEPTOS BÁSICOS. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Transcripción de la presentación:

Programación Orientada a Objetos Unidad III – Conceptos Avanzados de Programación Programación Orientada a Objetos Programación I - 0416202

Programación Orientada a Objetos Contenido Esta lección abarca los siguientes temas con respecto a Recursividad: ¿Qué es recursividad? Utilidad de la recursividad Formas de recursividad Casos base Funcionamiento de un algoritmo recursivo Ejemplos de algoritmos recursivos Notas importantes Recursividad Vs Iteratividad ¿Por qué escribir programas recursivos? ¿Cuándo usar/no usar recursividad? Ejemplos clásicos Ejercicios

Programación Orientada a Objetos Recursividad ¿Qué es Recursividad? El concepto de recursividad va ligado al de repetición. Son recursivos aquellos Algoritmos que, estando encapsulados dentro de una método, son llamados desde él mismo, una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc. Algo es recursivo, si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.

Programación Orientada a Objetos Recursividad Utilidad de la Recursividad Cuando la solución de un problema se puede expresar en términos de la resolución de problemas de la misma naturaleza, aunque de menor complejidad.

Programación Orientada a Objetos Recursividad Formas de Recursividad La recursividad en los subprogramas puede darse de dos maneras diferentes: a) Directa El subprograma se llama directamente a sí mismo. b) Indirecta El subprograma llama a otro subprograma, y éste a su vez llama al primero.

Programación Orientada a Objetos Recursividad Basada en el criterio: Divide y Vencerás Un problema complejo, se divide en uno más sencillo. Solo se debe conocer la solución no recursiva para algún caso sencillo (denominado caso base) y hacer que la división del problema termine recurriendo a los casos bases que se hayan definido. Se puede considerar que se “tiene resuelto” el problema mas complejo (sin tener que definir la secuencia exacta de pasos necesarios para resolver el problema)

Programación Orientada a Objetos Recursividad Sintaxis de una función ó método recursivo Se debe recordar que siempre que se completa la llamada a un método o subprograma, el control regresa al punto en el cual el subprograma fue llamado. Se aplica la misma regla a las llamadas recursivas. Una función ó método recursivo debe tener: La llamada recursiva. Condición de parada ó de terminación.

Programación Orientada a Objetos Recursividad Sintaxis de una función ó método recursivo Las funciones ó métodos recursivos se componen de: Caso base: una solución simple para un caso particular (puede haber más de un caso base). 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: El procedimiento se llama a sí mismo. El problema se resuelve, resolviendo el mismo problema pero de tamaño menor. La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará.

Programación Orientada a Objetos Recursividad Casos Base En toda definición recursiva de un problema, se debe establecer un estado básico, es decir un estado en el cual la solución no se presente de manera recursiva sino directamente. Además, la entrada (datos) del problema debe ir acercándose al estado básico.  Es decir, para que las llamadas recursivas no continúen indefinidamente, el cuerpo de un subprograma recursivo debe incluir por lo menos un caso terminal, es decir, un caso que no contiene más llamadas al subprograma.

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo int potencia (int b, int n) { if(n==0) return 1; else return ( b* potencia(b,n-1) ); } potencia(b,n) = 1 si n=0 b * potencia(b,n-1) si n>0

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo return 1 return 5*Potencia(0) return 5*Potencia(1) return 5*Potencia(2)

Programación Orientada a Objetos Recursividad Funcionamiento de un algoritmo recursivo Se descompone el problema en problemas de menor complejidad (de la misma naturaleza que el problema inicial) Se resuelve el problema para, al menos, un caso base. Se compone la solución final a partir de las soluciones parciales que se han obtenido.

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo Escribe un programa que calcule el factorial (!) de un entero no negativo. A continuación, algunos ejemplos de factoriales: 0! = 1 1! = 1 2! = 2  2! = 2 * 1! 3! = 6  3! = 3 * 2! 4! = 24  4! = 4 * 3! 5! = 120  5! = 5 * 4!

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo 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 = 3 * 2! = 4 * 6 = 4 * 3! = 5 * 24 = 5 * 4! = N * (N – 1)!

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo Aquí podemos ver la secuencia que toma el factorial 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. 1 si N = 0 (Base) N ! = N * (N – 1) ! si N > 0 (Recursión)

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo int factorial (int n) { int resultado; if(n==0) resultado = 1; else resultado = n * factorial(n-1); return resultado; } factorial(n)= 1 si n=0 n * factorial(n-1) si n>0

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo

Programación Orientada a Objetos Recursividad Ejemplo de una función ó método recursivo

Programación Orientada a Objetos Recursividad Notas importantes sobre Recursividad Siempre se debe avanzar hacia un caso base. Las llamadas recursivas simplifican el problema, y en última instancia los casos bases nos ayudan a encontrar la solución. Los casos bases corresponden a situaciones que se pueden resolver con facilidad. Los demás casos se resuelven recurriendo, antes o después a alguno (s) de los casos bases.

Programación Orientada a Objetos Recursividad Recursividad Vs Iteratividad Aspectos que hay que considerar al momento de decidir como se va a implementar la solución de un problema: La Carga Computacional: Tiempo de CPU y llamadas a memoria asociadas a las llamadas recursivas. La Redundancia: Algunas soluciones recursivas resuelven el mismo problema en repetidas ocasiones. La Complejidad de la Solución: En ocasiones las soluciones iterativas son más difíciles de encontrar. La Legibilidad y la Elegancia del Código: La solución recursiva puede ser más sencilla.

Programación Orientada a Objetos Recursividad ¿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.

Programación Orientada a Objetos Recursividad ¿Cuándo usar Recursividad? Para simplificar el código. Cuando la estructura de datos es recursiva ejemplo : árboles. ¿Cuándo No usar Recursividad? Cuando el método cambia de manera impredecible de datos. Cuando las iteraciones sean la mejor opción.

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo Realizar un algoritmo recursivo para determinar la suma de los n primeros números naturales. Solución Iterativa int suma_natural (int n){ int acum=0; for(int i=1; i<=n; i++) { acum=acum+i; } return acum; Solución Recursiva int suma_natural (int n){ if(n==1) return 1; else return n+suma_natural(n-1); }

Programación Orientada a Objetos Recursividad Ejemplo de una función o método recursivo Dado un vector de enteros de n posiciones, que se encuentra totalmente pre-cargado, encontrar una solución recursiva que permita obtener el elemento mayor de dicho vector. int mayor (int * vec){ int i, may=0; for(i=0;i<MAX;i++) { if (vec[i]>may) may = vec[i]; } return may; Solución Iterativa

Programación Orientada a Objetos Recursividad Solución Recursiva Mayor(V, n) = V [0] si n = 0 V [n] ó Mayor(V, n-1) si n > 0 void main(){ int vector[]={8,3,9,1}; printf(“El Mayor es: %d”, mayor(vector,3) ); getch(); } int mayor (int vec[], int n){ int aux; if(n==0) return vec[0]; else { aux = mayor(vec, n-1); if(vec[n]>aux) return vec[n]; return aux; }

Programación Orientada a Objetos Recursividad Solución Recursiva int mayor (int vec[], int n){ int aux; if(n==0) return vec[0]; else { aux = mayor(vec, n-1); if(vec[n]>aux) return vec[n]; return aux; } mayor(vector,0) {8,3,9,1} 0 mayor(vector,1) {8,3,9,1} 1 mayor(vector,2) {8,3,9,1} 2 mayor(vector,3) {8,3,9,1} 3 LLAMADAS vec n return 8  aux=8 if (vec[1]>aux) 3>8 return 8  aux=8 if (vec[2]>aux) 9>8 return 9  aux=9 if (vec[3]>aux) 1>9 return 9  aux=9 RETORNOS

Programación Orientada a Objetos Recursividad Ejemplos clásicos Existen muchos ejemplos clásicos de algoritmos recursivos, algunos de los más populares son: 8 Reinas Torres de Hanoi Cuadrado mágico Salto del caballo

Programación Orientada a Objetos Recursividad Ejemplos clásicos Las 8 Reinas Ubicar 8 reinas en un tablero de ajedrez sin que se amenacen entre ellas.

Programación Orientada a Objetos Recursividad Ejemplos clásicos Torres de Hanoi A B C

Programación Orientada a Objetos Recursividad Ejemplos clásicos Cuadrado Mágico Solución de EULER, Cuadrado Mágico, filas y columnas suman 260

Programación Orientada a Objetos Recursividad Ejemplos clásicos Salto del Caballo Intentar pasar el caballo por todas las casillas del tablero, sin pasar dos veces por una misma casilla

Programación Orientada a Objetos Recursividad Ejercicios Ejercicio 1: Programa una función recursiva que Dado una palabra revisar cuántas veces aparece determinada letra. Ejercicio 2: Programa una función recursiva que calcule la suma de un vector de números enteros. Ejercicio 3: Programa una función recursiva que invierta el orden de un vector de números enteros.

Programación Orientada a Objetos Recursividad Ejercicios Ejercicio 1: Programa una función recursiva que Dado una palabra revisar cuántas veces aparece determinada letra. #include <stdio.h> #include <conio.h> #include <string.h> int enc(char *,int,int); void main(){ char cadena[11]="universidad"; char letra='d'; int aux=-1; clrscr(); if((aux=enc(cadena,strlen(cadena),(int)letra))!=-1) printf(“Numero de veces encontrada %d",aux); else printf("\nLetra no encontrada"); getch(); } int enc(char *v,int n,int elem){ int aux=0; if(n==0) return 0; else{ aux=enc(v,n-1,elem); if(v[n]==elem) return ++aux; return aux; }