Recurrencia Programación II 27-28 de enero de 2009.

Slides:



Advertisements
Presentaciones similares
Diseño y análisis de algoritmos
Advertisements

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
Programación II de febrero de 2009
Introducción a los Algoritmos
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
INSTTUTO TECNOLOGICO DE APIZACO
Curso 04/05 lecc.5 Algoritmos parametrizados S. Velilla 1 Univ. de Zaragoza algoritmos con parámetros de entrada: Algoritmo ver_si_es_par; { Este algoritmo.
1.3 Programación modular. Subprogramas.
UNIVERSIDAD LATINA (UNILA) II.- ANALISIS DE ALGORITMOS
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Estructuras de Repetición
Objetivos Específicos de la Unidad
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
Tema 3. Optimización de Código
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 Acciones y funciones 2.1 Concepto
Programación I Teoría VI: Recursividad
FUNCIONES Y PROCEDIMIENTOS
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Recurrencia Programación II 3-4 de febrero de 2009.
Fundamentos de Programación
Tema 4: Sentencias de control
Operadores de comparación en PHP Programación en Internet II.
Ejercicios de funciones
Programación de Computadores
Semana 5 Subprogramas..
ALGORITMOS.
Introducción a los punteros
Complejidad Programación II de febrero de 2009.
Algoritmos numéricos. Método de “aproximación sucesiva”: se genera una hipótesis sobre la respuesta y en cada iteración se utiliza dicha hipóte- sis para.
Funciones1 PROGRAMACIÓN ESTRUCTURADA EN PSEUDÓCODIGO Profr. Miguel Rodríguez Hernández PROGRAMACIÓN MODULAR O FUNCIONAL.
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )

Inteligencia artificial
Programación II 3-4 de marzo de 2009
SOFTWARE DE PROGRAMACIÓN
Material de apoyo Unidad 4 Estructura de datos
Búsqueda y ordenación Programación II 7-8 de enero de 2009.
Análisis de algoritmos
Recurrencia Programación II de enero de 2009.
EXPRESIONES Y SENTENCIAS
Recursividad.
Parte II. Algorítmica. 4. Programación dinámica.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Estructuras de Repetición (Hacer-Mientras)
Parte I. Estructuras de Datos.
Estructuras de control Resolución de problemas y algoritmos.
1 Programación La Programación de ordenadores comenzó como un arte, y aún hoy en día mucha gente aprende a programar sólo mirando a otros proceder (ej.
Análisis de algoritmos Generalidades
Programación Procedural y Recursiva en C++
Estructuras de Repetición (Hacer-Mientras)
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
SEMANA 01_2.
Ing. Betty Suárez Torres
El lenguaje de programación C - Control de flujo y bucles -
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
Práctica Profesional PHP.
Estructuras de Decisión
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
 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.
U11: Recursividad Otra manera de hacer bucles Dicen algunos pedagogos que conceptualmente mas sencilla.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Recursividad.
Ciclos de Repeticion Yoel Gutierrez Unidad 6. Contenido DefinicionExplicacionEjemplosReferencias.
Complejidad Programación II de febrero de 2009.
Transcripción de la presentación:

Recurrencia Programación II de enero de 2009

Recurrencia Un concepto es recursivo si está definido a partir de su mismo Cada definición recursiva tiene un caso base y un caso recursivo Una función recursiva llama a su misma con otros valores de entrada Mayor dificultad: encontrar la definición recursiva

Ejemplo: Factorial funcion Factorial(n:natural) devuelve natural si (n=0) entonces devuelve 1;caso base sino devuelve n*Factorial(n-1); fsi ffuncioncaso recursivo

Ejecución ¿Qué pasa cuando ejecutamos una función recursiva? –relacionado con la ejecución de programas en general –ayuda en la interpretación de funciones recursivas Vamos a estudiar un modelo simplificado de la máquina

La pila La máquina mantiene una pila para controlar la ejecución Cada elemento en la pila es un registro de activación Cuando el código entra en un bloque, se añade un elemento Cuando sale, se remueve Registro 4 Registro 3 Registro 2 Registro 1

Registro de activación Cada registro de activación contiene los siguientes componentes: –Parámetros –Variables locales/resultados intermedios –Resultado final Cada componente puede ser de valor o de referencia

Referencia Un parámetro, una variable o el resultado de una función puede ser de referencia –Ejemplo: puntero en C Una referencia no contiene el valor mismo En cambio, contiene la dirección a la ubicación en memoria donde halla el valor int c=5; int *d=&c; c 5 d

Ejemplo: Factorial Suponemos que queremos saber cuál es el resultado de Factorial(3) Usamos el modelo de la pila para analizar la llamada Factorial(3) Introducimos los registros de activación correspondientes

Ejemplo: Factorial Factorial(3)

Ejemplo: Factorial Factorial(3) n 3 Factorial(n-1) Resultado

Ejemplo: Factorial Factorial(3) n 3 Factorial(n-1) Resultado n 2 Factorial(n-1) Resultado

Ejemplo: Factorial n 1 Factorial(n-1) Resultado Factorial(3) n 3 Factorial(n-1) Resultado n 2 Factorial(n-1) Resultado

Ejemplo: Factorial n 1 Factorial(n-1) Resultado n 2 Factorial(n-1) Resultado Factorial(3) n 3 Factorial(n-1) Resultado n 0 Factorial(n-1) Resultado

Ejemplo: Factorial n 1 Factorial(n-1) 1 Resultado n 2 Factorial(n-1) Resultado Factorial(3) n 3 Factorial(n-1) Resultado n 0 Factorial(n-1) Resultado

Ejemplo: Factorial n 1 Factorial(n-1) 1 Resultado Factorial(3) n 3 Factorial(n-1) Resultado n 2 Factorial(n-1) 1 Resultado

Ejemplo: Factorial Factorial(3) n 3 Factorial(n-1) 2 Resultado n 2 Factorial(n-1) 1 Resultado

Ejemplo: Factorial Factorial(3) 6 n 3 Factorial(n-1) 2 Resultado

Ejemplo: Factorial Factorial(3) 6

Ejercicio 1.5 Escribir una función recursiva EsPrimo que devuelve si o no un número natural n es primo Usar la pila para interpretar el resultado de EsPrimo(5)

Ejercicio 1.5 funcion EsPrimo(n:natural) devuelve booleano devuelve Primo(n,2); ffuncion

Ejercicio 1.5 funcion Primo(n,k:natural) devuelve booleano si (k >= n) entonces devuelve cierto; sino si (n mod k = 0) entonces devuelve falso; sino devuelve Primo(n,k+1); fsi ffuncion

Ejercicio 1.5 EsPrimo(5)

Ejercicio 1.5 EsPrimo(5) n 5 Primo(n,2) Resultado

Ejercicio 1.5 EsPrimo(5) n 5 Primo(n,2) Resultado n 5 k 2 Primo(n,k+1) Resultado

Ejercicio 1.5 n 5 k 2 Primo(n,k+1) Resultado EsPrimo(5) n 5 Primo(n,2) Resultado n 5 k 3 Primo(n,k+1) Resultado

Ejercicio 1.5 n 5 k 3 Primo(n,k+1) Resultado n 5 k 2 Primo(n,k+1) Resultado EsPrimo(5) n 5 Primo(n,2) Resultado n 5 k 4 Primo(n,k+1) Resultado

Ejercicio 1.5 n 5 k 4 Primo(n,k+1) Resultado n 5 k 5 Primo(n,k+1) Resultado

Ejercicio 1.5 n 5 k 4 Primo(n,k+1) cierto Resultado n 5 k 5 Primo(n,k+1) Resultado

Ejercicio 1.5 n 5 k 3 Primo(n,k+1) cierto Resultado n 5 k 2 Primo(n,k+1) Resultado EsPrimo(5) n 5 Primo(n,2) Resultado n 5 k 4 Primo(n,k+1) cierto Resultado

Ejercicio 1.5 n 5 k 2 Primo(n,k+1) cierto Resultado EsPrimo(5) n 5 Primo(n,2) Resultado n 5 k 3 Primo(n,k+1) cierto Resultado

Ejercicio 1.5 EsPrimo(5) n 5 Primo(n,2) cierto Resultado n 5 k 2 Primo(n,k+1) cierto Resultado

Ejercicio 1.5 EsPrimo(5) cierto n 5 Primo(n,2) cierto Resultado

Ejercicio 1.5 EsPrimo(5) cierto

Ejercicio: Fibonacci La serie Fibonacci empieza por … Tiene una definición recursiva: F(0) = 1 F(1) = 1 F(n) = F(n-2) + F(n-1), n > 1

Fibonacci funcion F(n:natural) devuelve natural si (n <= 1) entonces devuelve 1; sino devuelve F(n-2)+F(n-1); fsi ffuncion

Ejercicio: Fibonacci Usar la pila para interpretar el resultado de F(4)

Ejercicio: Fibonacci F(4)

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado n 2 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado n 2 F(n-2) F(n-1) Resultado n 0 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado n 2 F(n-2) 1 F(n-1) Resultado n 0 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado n 2 F(n-2) 1 F(n-1) Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) F(n-1) Resultado n 2 F(n-2) 1 F(n-1) 1 Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 2 F(n-2) 1 F(n-1) 1 Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) F(n-1) Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 2 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 2 F(n-2) F(n-1) Resultado n 0 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 2 F(n-2) 1 F(n-1) Resultado n 0 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 2 F(n-2) 1 F(n-1) Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) Resultado n 2 F(n-2) 1 F(n-1) 1 Resultado n 1 F(n-2) F(n-1) Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) Resultado n 3 F(n-2) 1 F(n-1) 2 Resultado n 2 F(n-2) 1 F(n-1) 1 Resultado

Ejercicio: Fibonacci F(4) n 4 F(n-2) 2 F(n-1) 3 Resultado n 3 F(n-2) 1 F(n-1) 2 Resultado

Ejercicio: Fibonacci F(4) 5 n 4 F(n-2) 2 F(n-1) 3 Resultado

Ejercicio: Fibonacci F(4) 5

Tipos de recursividad RecursividadDirectaIndirecta Simple Múltiple F(x) G(x)F(x) G(x)F(x)

Recursividad indirecta Determinar si un número natural n es par –caso base: n = 0 es un número par –caso recursivo: n es par si n – 1 es impar Determinar si un número natural n es impar –caso base: n = 0 no es un número impar –caso recursivo: n es impar si n – 1 es par

Par e impar funcion Par(n:natural) devuelve booleano si (n = 0) entonces devuelve cierto; sino devuelve Impar(n – 1); fsi ffuncion funcion Impar(n:natural) devuelve booleano si (n = 0) entonces devuelve falso; sino devuelve Par(n – 1); fsi ffuncion

Tipos de recursividad RecursividadDirectaIndirecta Simple Factorial(n) Suma(V,i,n) Primo(n,k) Par(n) – Impar(n) Múltiple Fibonacci(n)

Transformación Todo algoritmo recursivo se puede transformar en un algoritmo iterativo (con bucles) Más difícil para recursividad múltiple y/o indirecto No obstante, para recursividad simple y directo hay una transformación general

Función recursiva funcion Recursiva(x:tipo) devuelve tipo si B(x) entonces devuelve S; sino devuelve F(x, Recursiva(T(x))); fsi ffuncion x: parámetrosT(x): llamada recursiva B(x): condiciónF(x,y): acción recursiva S: acción caso base

Función equivalente iterativa funcion Iterativa(x:tipo) devuelve tipo resultado  S; mientras no(B(x)) hacer resultado  F(x, resultado); x  T(x); fmientras devuelve resultado; ffuncion

Ejemplo: Factorial funcion Factorial(n:natural) devuelve natural si (n = 0) entonces devuelve 1; sino devuelve n*Factorial(n-1); fsi ffuncion x: nT(x): n - 1 B(x): n = 0F(x,y): n*y S: 1

Función equivalente iterativa funcion Factorial(n:natural) devuelve natural resultado  1; mientras no(n = 0) hacer resultado  n*resultado; n  n - 1; fmientras devuelve resultado; ffuncion

Ejemplo: Primo funcion Primo(n,k:natural) devuelve booleano si (k >= n) entonces devuelve cierto; sino si (n mod k = 0) entonces devuelve falso; sino devuelve Primo(n,k+1); fsi ffuncion x: n, kT(x): n, k+1 B(x): k >= nF(x,y): si (n mod k = 0) falso S: cierto sino y

Función equivalente iterativa funcion Primo(n,k:natural) devuelve booleano resultado  cierto; mientras no(k >= n) hacer si (n mod k = 0) entonces resultado  falso; sino resultado  resultado; n  n; k  k + 1; fmientras devuelve resultado; ffuncion