Recursividad. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Documentos relacionados
Tema: Funciones, Procedimientos y Recursividad en C#.

Tema 7: 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

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

RECURRENCIA RECURSIÓN o RECURSIVIDAD

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

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Tecnología de la Programación

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

Funciones Tipos de funciones y Recursividad

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

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

Definición. Mónica E. García García Feb 07

Tema: Estructuras de Selección en C#.

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

Inteligencia Artificial: Prolog

Programación Orientada a Objetos Métodos Guía de Ejercicios v9.7

Bloque 4. La descomposición funcional y el diseño descendente

TEMA 5: Subprogramas, programación modular

Pero nos están faltando otros operadores imprescindibles:

Java: Clases Abstractas e Interfaces

Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL

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

Carlos A. Rivera-Morales. Precálculo 2

Tema 5.- Recursividad

Algoritmos. Definiciones básicas y componentes de un algoritmo. Contenido

Java: control de excepciones

Problemas de Recursividad

PROGRAMACION MODULAR FUNCIONES

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

Apuntadores en C y C++

Bases de Datos: fundamentos del modelo relacional

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

Strings en Java. String es una clase, no un tipo primitivo. Las variables de tipo String, en cualquier instante, pueden contener:

Ejercicios sobre recursividad

Tema: Estructuras de Repetición en C# [For].

PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad

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

Análisis de algoritmos

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Tema 6: Generación de código (parte 2)

Java: control de excepciones

Metodología de la Programación II. Recursividad

Ejercicios Tema 6. Funciones

Tema 3. Patrones y Definiciones de Funciones

Universidad Nacional del Santa FACULTAD DE INGENIERIA E.A.P de Ingeniería de Sistemas e Informática NETBEANS 7.0

Tema 3. Análisis de costes

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Estrategias de Diseño de Algoritmos

Estructuras de Datos Declaraciones Tipos de Datos

Bases de Datos: Introducción

Exponencial, lineal y logarítmico

Tema 7: Polimorfismo. Índice

Introducción a la Programación en Java

SUBPROGRAMAS FUNCIONES

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

int int. 1622

Elementos de un programa en C

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Universidad de Managua

TEMA 1. Introducción a la programación. CONSIDERACIONES GENERALES.

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Recursividad, recursividad con memoria y un poco de programación dinámica.

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

8. Sentencia return y métodos

Interrogación 3 - Secciones 2 y 4 - Bachillerato Profesoras: Claudia Navarrete y Carla Vairetti

Tema 4: Procedimientos y estructuras recursivas

EXAMEN PARCIAL 23 de Octubre de 2015 Programación I. Grado en Matemáticas e Informática ETSIINF UPM

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Estructuras de Repetición (Repita para)

A = A n. = {a n. Georges E. Alfaro Salazar 1

El lenguaje de Programación C. Fernando J. Pereda

Construcciones del Lenguaje Java

Programación Dinámica 1

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

Estructura de Computadores

Prueba N o 1. Programación II

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Introducción a la Programación Orientada a Objetos

Por ejemplo, el factorial puede definirse de manera recursiva de la siguiente manera:

Diferentes Perspectivas de un Ordenador

Programación-Tarea 14: Ocampo Venegas Josué

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Capítulo 2: Recursividad.

Algoritmos de Ordenación

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Java Básico. Métodos estáticos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Cuestiones: Ejercicios 2: 1) Qué imprimen los siguientes bucles?

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Trabajo Práctico 5 Estructura Repetitiva

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información 1º año

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Tema 4. Excepciones en Java

SUCESIONES. sucesiones 1

6. EJERCICIOS RESUELTOS

LAS TABLAS RECURSIVAS EN SQL SERVER 2008

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

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Transcripción:

Recursividad Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl

Recursividad v Es la técnica de definir un proceso en términos de si mismo. v Por ejemplo, la definición de una Lista : Una LISTA es: número número coma LISTA v La definición anterior caracteriza como Lista cada una de las siguientes secuencias de números: 23, 12, 23, 4 7 1, 6 2

Recursividad v Otro ejemplo de recursividad: el factorial de un número. factorial( x ) = x * factorial( x-1 ) si x > 0 1 si x = 0 3

Ejemplo de función recursiva v Implementación de la función Factorial: public class Utiles { public static int factorial(int n){ if( n > 0 ) return n*factorial( n-1 ); else return 1; public class Ejemplo { public static void main(string[] arg){ System.out.println(Utiles.factorial( 4 )); 4

Ejemplo de función recursiva (cont.) public static int factorial(int n){ if( n > 0 ) return n*factorial(n-1); else return 1; Stack de invocaciones del método factorial n=0 return 1 n=1 return 1*factorial(0) n=2 return 2*factorial(1) n=3 return 3*factorial(2) n=4 return 4*factorial(3) r=utiles.factorial(4); 5

Ejemplo de función recursiva (cont.) public static int factorial(int n){ if( n > 0 ) return n*factorial(n-1); else return 1; factorial=1 factorial=1 factorial=2 factorial=6 n=0 return 1 Stack de invocaciones del método factorial n=1 return 1*factorial(0) n=2 return 2*factorial(1) n=3 return 3*factorial(2) n=4 return 4*factorial(3) factorial=24 r=utiles.factorial(4); 6

Recursividad y condición de término v Debe existir una condición de término o caso base, que establezca cuando el método debe dejar de invocarse recursivamente. v Debe existir una convergencia a la condición de término en las sucesivas invocaciones al método recursivo. public static int factorial(int n){ if( n > 0 ) return n*factorial( n-1 ); else return 1; Condición de término: Si n==0 se retorna 1. Convergencia hacia condición de término: n se avecina a 0 en cada invocación. 7

Tipos de recursividad v Recursividad directa: cuando un método P contiene dentro de si un llamado a si mismo. v Recursividad indirecta: cuando un método P contiene dentro de si un llamado a otro método Q que contiene llamados (directos o indirectos) a P. 8

Recursividad y variables locales v Si un método recursivo utiliza variables locales, estas serán creadas para cada invocación del método. Las variables locales (y sus valores) serán visibles sólo en la correspondiente invocación (cada invocación del procedimiento tiene su propia área de datos). v Cada invocación a un procedimiento requiere de cierto espacio de memoria, el que sólo es liberado al terminar la ejecución de éste. El espacio de memoria disponible es limitado. v Los métodos recursivos son normalmente más lentos y consumen más memoria que sus equivalentes no recursivos. 9

Ejemplo 1 v Plantear una función recursiva para calcular la suma de los N primeros enteros positivos. v Análisis: Suma( N ) = 1 si N = 1 Caso base N + Suma( N-1 ) si N > 1 public static int suma(int n){ if( n == 1 ) return 1; else return n + suma( n-1 ); Supuesto en esta implementación: el valor de n ingresado inicialmente es mayor que 0. 10

Ejemplo 1 (cont.) Suma(3) Suma(2) Suma(1) Suma(4) 4+6=10 Suma(3) 3+3=3 Suma(2) 2+1=3 Suma(1) 6 3 1 11

Ejemplo 2 v Calcular el n-ésimo numero de Fibonacci. v Análisis: Fib(N) = v Ejemplo: 0 si N = 0 1 si N = 1 Fib(N-1) + Fib(N-2) si N > 1 Casos base Fib( 0 ) = 0 Fib( 1 ) = 1 Fib( 2 ) = Fib(1) + Fib(0) = 1 + 0 = 1 Fib( 3 ) = Fib(2) + Fib(1) = 1 + 1 = 2 Fib( 4) = Fib(3) + Fib(2) = 2 + 1 = 3 12

Ejemplo 2 (cont.) v Implementación: public static int fibonacci(int n){ if( n <= 1 ) return n; else return fibonacci( n-1 ) + fibonacci( n-2 ); 13

Ejemplo 2 (cont.) Fib(1) Fib(1) Fib(2) Fib(2) 1+0=1 1 Fib(0) Fib(3) Fib(3) 1+1=2 1 Fib(1) 0 Fib(0) Fib(4) 2+1=3 2 1 1 Fib(1) Fib(1) Fib(1) Fib(2) 1+0=1 1 Fib(0) 0 Fib(0) 14

Una ayuda para saber si entendí la recursividad Test de aprendizaje de recursividad: Si no está seguro de entender la recursividad lea el Test de aprendizaje de recursividad en caso contrario deténgase, Ud. ya entendió. v Nota: este test sólo es capaz de concluir (en un tiempo suficientemente largo) que Ud. está seguro de haber entendido la recursividad (no es capaz de concluir lo contrario). 15