Programación 2. Lección 3. Introducción a la recursividad

Documentos relacionados
Programación I Recursividad.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Tema 7: Recursividad

Análisis de algoritmos. Recursividad

Estructuración del programa en partes más pequeñas y sencillas

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Tema: Funciones, Procedimientos y Recursividad en C#.

Programación 1 Desarrollo de proyectos de programación. Desarrollo de un módulo C++ de biblioteca para trabajar con conjuntos de letras

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Carlos A. Rivera-Morales. Precálculo 2

Funciones Tipos de funciones y Recursividad

Recursión Directa. Una función es de recursión directa si contiene una llamada explícita a si misma. return foo (y 1); Recursión Indirecta

Si un número es múltiplo de otro, u dicho de forma, comprobar si un número es divisor de otro.

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

TEMA 5: Subprogramas, programación modular

Recursión. Capítulo 4

RECURRENCIA RECURSIÓN o RECURSIVIDAD

UAA Sistemas Electrónicos Estructura de Datos Muñoz / Serna

Tema 9. Recursividad

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Metodología de la Programación II. Recursividad

Ejercicios sobre recursividad

Programación 1. Diseño modular de nuevos tipos de datos en un programa. Diseño modular de un tipo de dato con estructura de conjunto

Tecnología de la Programación

Tema 11. Diseño de algoritmos recursivos 1. Tema 11. Diseño de algoritmos recursivos

El concepto de función en programación se fundamenta en el concepto de función matemática 1

Examen escrito de Programación 1. Jueves 5 de febrero de Problema 1 o (3.5 puntos)

Modularización en lenguaje C. Funciones

Introducción a la programación en C eme - Escuela Universitaria de Música

Examen Fundamentos de Programación 15 de enero de 2016 Curso 2015/16

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Aritmética en Haskell

Programación imperativa. Algoritmos y Estructuras de Datos I. Lenguaje C. Segundo cuatrimestre de 2014

<tipo> Tipo de dato de los elementos del vector

Programación Dinámica

Programación I: Funciones y módulos

Estructura de datos y de la información Boletín de problemas - Tema 10

Funciones y paquetes PL/SQL. Jonathan Medina Gómez Facultad de ingeniería Universidad de Antioquia

Programación Dinámica

Presentación. Programación I. Conceptos Avanzados de Programación. :: Prof. Yeniffer Peña

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Capítulo 2: Recursividad.

int int. 1622

Una Introducción a la Programación Estructurada en C

Ejercicios Tema 6. Funciones

Funciones: Pasos por Referencia Recursividad

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Acuerdo 286 Matemáticas

Inteligencia Artificial: Prolog

SUBPROGRAMAS FUNCIONES

4.2. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo.

Elementos de un programa en C

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010

Relaciones de recurrencia

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Metodología y Tecnología de la Programación

Taller Matemático. Sucesiones. Cristóbal Pareja Flores antares.sip.ucm.es/cpareja Facultad de Estadística Universidad Complutense de Madrid

Esquema. Condicionales. Ejemplo de condicional. Demostración. P { if (B) uno else dos } Q. P { while (B) cuerpo } Q

Funciones y paso de parámetros

Tema 6: Funciones recursivas

Semana de las Matemáticas e Ingeniería. Desarrollo de algoritmos recursivos empleando la aplicación PseInt

Alonso Ramírez Manzanares Computación y Algoritmos 10.03

7.3. Estructura de un programa

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; }

Tema 3. Patrones y Definiciones de Funciones

Programación-Tarea 14: Ocampo Venegas Josué

Tema 10: Árbol binario de búsqueda

Problemas de Recursividad

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Análisis y Diseño de Algoritmos

Recursividad. Introducción a la programación

DEPARTAMENTO DE MATEMATICAS Y FISICA Matemáticas Discreta

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Exponencial, lineal y logarítmico

Tipos Recursivos de Datos

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

DE LOS NÚMEROS NATURALES Y ENTEROS

Programación en Lenguaje C

Guía práctica de estudio 03: Algoritmos

Tipos de Datos en C. Palabras reservadas en C

Porque usar Arreglos?

import math # Importa la libreria math, que permite utilizar operaciones y funciones matematicas

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Declaración de Procedimientos

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Unidad Nº V Listas Enlazadas

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3

#include <stdio.h> /* Factorial de un número - versión 1- */

Programación de sistemas

RECURSIVIDAD A. GARRIDO

Transcripción:

Programación 2 Lección 3. Introducción a la recursividad 1

1. Definiciones recursivas Número natural y número entero Múltiplos de 7 Secuencia de datos Factorial de un número natural Sucesión de Fibonacci 2. Algoritmos recursivos Función factorial Función fibonacci 2

1. Definiciones recursivas Muchas estructuras matemáticas, estructuras de datos y algoritmos admiten sencillas definiciones recursivas. En esta lección se presenta una ilustrativa colección de ejemplos. Qué es un número natural? Base de la definición: El 0 es un número natural Recurrencia: Si n es un número natural entonces n + 1 es también un número natural De la definición anterior se deduce que el conjunto de los números naturales es {?,?,?, 3

Qué es un número natural? Base de la definición: El 0 es un número natural Recurrencia: Si n es un número natural entonces n + 1 es también un número natural De la definición anterior se deduce que el conjunto de los números naturales es { 0, 1, 2, 3, 4,... Hay más formas de definir los naturales? 4

Dos definiciones recursivas de los números naturales Base de la definición: El 0 es un número natural Recurrencia: Si n es un número natural entonces n + 1 es también un número natural De la definición anterior se deduce que el conjunto de los números naturales es { 0, 1, 2, 3, 4,... Hay más formas de definir los naturales? Sí, por ejemplo: Base de la definición: El 0 es un número natural Base de la definición: El 1 es un número natural Recurrencia: Si n es un número natural entonces n + 2 es también un número natural Estas definiciones constan de una base (más o menos amplia) y de una recurrencia (más o menos amplia) apoyada en alguna operación auxiliar 5

Una definición de los números enteros Base de la definición: El es un número entero Recurrencia: Si es un número entero entonces es también un número entero De la definición planteada debe deducirse que el conjunto de los números enteros es {, 4, 3, 2, 1, 0, 1, 2, 3, 4, 6

Una definición recursiva de los números enteros Base de la definición: El 0 es un número entero Recurrencia: Si n es un número entero entonces n 1 es también un número entero Recurrencia: Si n es un número entero entonces n + 1 es también un número entero De la definición propuesta se deduce que el conjunto de los números enteros es: {, 4, 3, 2, 1, 0, 1, 2, 3, 4, 7

Otra definición recursiva de los números enteros Base de la definición: El 1 es un número entero Base de la definición: El 1 es un número entero Recurrencia: Si m y n son números enteros entonces m + n es también un número entero De la definición anterior se deduce que el conjunto de los números enteros es: {, 4, 3, 2, 1, 0, 1, 2, 3, 4, 8

Una definición de los múltiplos de 7 Base: El es un número múltiplo de 7 Recurrencia: Si es un múltiplo de 7 entonces es también múltiplo de 7 De la definición planteada debe deducirse que el conjunto de los números múltiplos de 7 es : {, 21, 14, 7, 0, 7, 14, 21, 9

Una definición recursiva de los múltiplos de 7 Base de la definición: El 0 es un múltiplo de 7 Recurrencia: Si n es un múltiplo de 7 entonces n 7 es también un múltiplo de 7 Recurrencia: Si n es un múltiplo de 7 entonces n + 7 es también un múltiplo de 7 De la definición propuesta se deduce que el conjunto de los números múltiplos de 7 es: {, 21, 14, 7, 0, 7, 14, 21, 10

Otra definición recursiva de los múltiplos de 7 Base: El 7 es un número múltiplo de 7 Base: El 7 es un número múltiplo de 7 Recurrencia: Si m y n son múltiplos de 7 entonces m + n es también un múltiplo de 7 De la definición anterior se deduce que el conjunto de los números múltiplos de 7 es: {, 21, 14, 7, 0, 7, 14, 21, 11

Definición recursiva de secuencia de datos de tipo T Base: Un número nulo de datos de tipo T define la secuencia <> de datos de tipo T Recurrencia: Si s es una secuencia de datos de tipo T entonces el resultado de concatenar tras s un dato de tipo T es también una secuencia de datos de tipo T De la definición anterior se deduce que si d1, d2, d3 y d4 son datos de tipo T entonces también son secuencias de datos de tipo T: <> <d1> <d2> <d3> <d4> <d1,d4> <d3,d2> <d2,d2> <d1,d4,d1> <d2,d1,d3> <d2,d2,d1,d3> <d4,d2,d1,d3> <d2,d1,d3,d2,d2> <d2,d1,d3,d2,d1> etc., etc. 12

Una definición recursiva del factorial de un número, n! Base de la definición: El factorial de 0 es igual a 1, es decir, 0! = 1 Recurrencia: Para n > 0 se define el factorial de n del modo siguiente n! = n x (n 1)! Deducir, a partir la definición anterior, los valores de: 0! =? 1! =? 2! =? 3! =? 4! =? 5! =? Etc., etc. 13

Una definición recursiva del factorial de un número, n! Base de la definición: El factorial de 0 es igual a 1, es decir, 0! = 1 Recurrencia: Para n > 0 se define el factorial de n del modo siguiente n! = n x (n 1)! De la definición anterior se deduce que: 0! = 1 // Se deduce de la base 1! = 1 x 0! = 1 // Se deduce de la recurrencia (y de la base) 2! = 2 x 1! = 2 // Se deduce de la recurrencia (y de la base) 3! = 3 x 2! = 6 // Se deduce de la recurrencia (y de la base) 4! = 4 x 3! = 24 // Se deduce de la recurrencia (y de la base) 5! = 5 x 4! = 120 // Se deduce de la recurrencia (y de la base) Etc., etc., etc. 14

Una definición recursiva de la sucesión de Fibonacci Base de la definición: El 0 es primer elemento de la sucesión de Fibonacci Base de la definición: El 1 es segundo elemento de la sucesión de Fibonacci Recurrencia: Para i > 2 el i ésimo elemento de la sucesión de Fibonacci es igual a la suma de los dos elementos que le preceden en dicha sucesión Deducir, a partir de la definición anterior, los naturales que integran la sucesión de Fibonacci: {?,?,?,?,?,?,?,?,?,?,?,?,?, 15

Una definición recursiva de la sucesión de Fibonacci Base de la definición: El 0 es primer elemento de la sucesión de Fibonacci Base de la definición: El 1 es segundo elemento de la sucesión de Fibonacci Recurrencia: Para i > 2 el i ésimo elemento de la sucesión de Fibonacci es igual a la suma de los dos elementos que le preceden en dicha sucesión De la definición anterior se deduce que los naturales que integran la sucesión de Fibonacci son los siguientes: { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 16

2. Algoritmos recursivos Función que devuelve el factorial de un natural // Pre: n 0 // Post: factorial(n) = ( [1,n]. ) int factorial (const int n) { if (n == 0) { return 1; // Solución base else { // n 1 0 // factorial(n 1) = ( [1,n 1]. ) return n * factorial(n 1); // Solución recurrente 17

Otra función recursiva que calcula el factorial de un natural // Pre: n 0 // Post: resultado = ( [1,n]. ) void factorial (const int n, int& resultado) { if (n == 0) { resultado = 1; // Solución base else { // n 1 0 factorial(n 1, resultado); // Solución recurrente // resultado = ( [1,n 1]. ) resultado = n * resultado; 18

Una función recursiva que calcula cualquiera de los elementos de una sucesión de Fibonacci // Pre: n 1 // Post: (n = 1 n = 2 fibonacci(n) = n 1) // (n > 2 fibonacci(n) = // fibonacci(n 2) + fibonacci(n 1)) int fibonacci (const int n) { if (n <= 2) { // Solución base // n = 1 n = 2 return n 1; else { // Solución recurrente // n > 2 return fibonacci(n 2) + fibonacci(n 1); 19

// Pre: n 1 // Post: (n = 1 n = 2 fibonacci(n) = n 1) // (n > 2 fibonacci(n) = // fibonacci(n 2) + fibonacci(n 1)) int fibonacci (const int n) { if (n <= 2) { // Solución base // n = 1 n = 2 return n 1; else { // Solución recurrente // n > 2 return fibonacci(n 2) + fibonacci(n 1); Una duda: La eficiencia de la función anterior es satisfactoria? 20