Trabajo Práctico Nº 06

Documentos relacionados
Trabajo Práctico Nº 13 Tema: RECURSIVIDAD

Qué es la recursividad?

RECURSIVIDAD. Prof. Ing. M.Sc. Fulbia Torres

Análisis de algoritmos. Recursividad

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

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO INGENIERÍA EN COMPUTACIÓN

Programación de sistemas Recursión

Complejidad de algoritmos recursivos

Secuencias Calculadas

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

Recursión. Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Recursión / 1

Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Recursión / 1

Programación de sistemas

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

Tema 1. Recursividad

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

dit UPM Tema 1: Introducción /recursión Análisis y diseño de software José A. Mañas

UNIVERSIDAD NACIONAL DE SALTA Sede Regional Orán AÑO: 2013 Carreras: TIG - TUP

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Tema: Funciones, Procedimientos y Recursividad en C#.

Tema: Funciones, Procedimientos y Recursividad en C#.

Programación II Recursividad Dr. Mario Rossainz López

M.C. Yolanada Moyao Martínez

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

Recursividad... un análisis posterior. Aurelio Sanabria Introducción a la programación

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

Recursividad Definición

Tema: Funciones, Procedimientos y Recursividad en C#.

Recursividad. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Fundamentos de Programación

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote RECURSIVIDAD Y SOBRECARGA DE METODOS

Funciones II. Fundamentos de Programación Fundamentos de Programación I

Soluciones a los ejercicios planteados en el curso

ESTRUCTURA DE DATOS: Tema 3. Recursividad

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

Tema 3. Estructuras de control y programación estructurada

PROGRAMACION ALGORITMOS Y ESTRUCTURAS DE DATOS PRACTICA N 4

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Ejercicios Tema 6. Funciones

Ámbito y Funciones. Lenguaje de Programación Estructurado. Siempre imaginé el Paraíso como algún tipo de biblioteca.

LABORATORIO 6 FUNCIONES

Funciones: Pasos por Referencia Recursividad

Introducción a los Computadores Funciones y recursividad en C

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

ESTRUCTURA DE DATOS: Tema 3. Recursividad

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

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

Tema 4.- Recursión e iteración

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

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Programación Unidad 5. Recursividad. Programación TIG - TUP 1. Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA

Jesús Ravelo Kelwin Fernández Universidad Simón Bolívar Dpto. de Computación y Tecnología de la Información

Programación 1 Tema 5. Instrucciones simples y estructuradas

Práctica 5.- Recursividad

UNIVERSIDAD AUTÓNOMA CHAPINGO DPTO. DE PREPARATORIA AGRÍCOLA ÁREA DE FÍSICA RECURSIÓN. Guillermo Becerra Córdova

Valentín Moreno Programación en FORTRAN ESQUEMA DE SELECCIÓN

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

PROBLEMAS DEL TEMA 7 SUBPROGRAMAS Y MODULARIDAD

Funciones recursivas

Cadenas de caracteres

Programación II Práctica 03: Recursividad Versión del 10/08/2016

Funciones recursivas

Estructura de Datos. Recursividad. Primer Semestre, Indice

Ejercicios aplicando estructuras de asignación.

1. (0.5 puntos) Indicar y justificar claramente cuál es el valor final de los datos miembro x, y, z.

4.1 Definición. Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. Un objeto (problemas, estructuras de datos) es

Curso Informática Lección 4. Instrucciones de control

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

Tema: Programación Dinámica.

Guía de Ejercicios Fracciones Algebraicas

Diseño y Análisis de Algoritmos

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Ahora responde a las siguientes cuestiones: Supongamos que el usuario introduce 3 en A, 4 en B y 5 en C

Subrutinas. Subrutinas. Erwin Meza Vega

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

Programación 1 Tema 5. Instrucciones simples y estructuradas

Introducción a Haskell. Cecilia Manzino

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

Tema 7: Recursividad

Recursividad. Facultad de Ciencias de la Computación. Juan Carlos Conde R. Object-Oriented Programming I

PRÁCTICA # 2. 0 Direcciones 1 Dirección 2 Direcciones 3 Direcciones

Algoritmos y Complejidad

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

Estructuras de Decisión Simples y Dobles

Recursividad... un análisis posterior. Jaime Gutiérrez Alfaro Introducción a la programación

Trabajo Práctico 7 Recursividad Versión 4

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Introducción a la Matemática Discreta

PROBLEMAS DEL TEMA 7: Subprogramas y Modularidad

dit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas

EJERCICIOS PARA EMPEZAR CON PHP

Ejercicios sobre recursividad

1. (1 punto) Dado el siguiente fragmento de programa:

Análisis de algoritmos

Transcripción:

Tema: Recursividad 1. Dado el siguiente método: static int puzle (int base, int limite) if (base > limite) return -1; if (base = = limite) return base * puzle(base+1,limite); 1.1 Identificar: a) el caso(s) base del método puzle. b) el caso(s) general del método puzle. 1.2 Mostrar que escribiría con las siguientes llamadas al método recursivo: a) System.out.println(puzle(14,10)); b) System.out.println(puzle(4,7)); c) System.out.println(puzle(0,0)); 2. Mostrar lo que retornará el siguiente método recursivo después de las llamadas dadas: static int concurso(int base, int lim) if (base = = lim) if (base > lim) return 0; return base + concurso(base+1,lim); a) x = concurso(0,3) x es... b) y = concurso(10,7) y es... c) z = concurso(5,50) z es... 3. En cada uno de los siguientes métodos identificar: a) el caso(s) base. b) una llamada recursiva a una versión más pequeña del método. c) y explicar que hace cada método. 3.1. static int potencia(int m, int n) if (n = = 0) return n * potencia(m,n -1); 3.2. static int fact (int n) if (n > 0) return n * fact(n -1); if (n = = 0) return 1; 3.3. static void clasificar(int [] datos, int desdeind, int hastaind) 1

Trabajo Práctico Nº 06 int maxi; if (desdeind!= hastaind) maxi = maxposicion(datos,desdeind,hastaind); cambiar(datos,maxi,hastaind); clasificar(datos,desdeind,hastaind-1); 4. Dado el siguiente método recursivo: static void desconocido(int N, int despl) int k; if (N > 0) desconocido (N-1, despl.+1); for (k = 1; k <= despl; k++) System.out.println( ); for (k = 1; k <= despl; k++) System.out.println( ); System.out.println( ); desconocido(n-1, despl+1); a) qué hace el método? b) Hacer un seguimiento con la llamada desconocido(4,1). 5. Explique por qué el siguiente método puede producir un valor incorrecto cuando se ejecute: static long factorial (long n) return n * factorial (--n); 6. Cuál es la secuencia numérica generada por el método recursivo f siguiente? return 3 * f (n-2) + 2 f (n - 1); 7. Cuál es la secuencia numérica generada por el método recursivo f siguiente? return 3 * f (n-2) + 2; 2

8. Cuál es la secuencia numérica generada por el método recursivo f siguiente? if (n = = 0 ) if (n = = 1 ) return 2; return 2 * f (n-2) + f (n - 1); 9. Escribir un método recursivo que calcule la suma: 1 + 2 + 3 +...+ (n-1) + n 10. Escribir un método recursivo para encontrar la suma de los enteros pares hasta N. 2 + 4 + 6 +...+ (n-2) + n 11. Escribir un método recursivo para calcular la suma de la siguiente serie de enteros, de 1 hasta N: 1 n + 2 n-1 + 3 n-2 +...+ n-1 2 + n 1 12. Suponer que la función G está definida recursivamente de la siguiente forma: 1 si x y G(x,y) = G(x-y+1)+1 si y < x Si x, y son enteros positivos. a) escribir el método recursivo b) encontrar el valor de G(8,6) c) encontrar el valor de G(100,10) 13. Sea H(x) un método definido recursivamente x > 0, sio x un entero: 1 si x = 1 H(x) = H(x/2)+1 si x > 1 a) escribir el método recursiva b) encontrar el valor de H(80) c) cómo podemos describir lo que hace este método? 14. Escribir un metodo recursivo int vocales(string cd) para calcular el número de vocales de una cadena. 15. Escribir un método recursivo que devuelva un valor true si una palabra pasada como argumento es un palíndromo y devuelve falso en caso contrario. 16. Un ejemplo sobre definición recursiva es la definición de multiplicación de números naturales. El producto de a * b donde a y b son enteros positivos, se puede definir como a sumado así mismo un número de veces igual a b. Esta definición es iterativa. Una definición iterativa equivalente sería: a * b = a sí b = 1 a * b = a * (b-1) + a sí b > 1 Con el fin de evaluar 6 * 3 utilizando esta definición, debemos primero evaluar 6 * 2 y entonces al resultado agregarle 6. Para evaluar 6 * 2, debemos primero evaluar 6 * 1 y agregarle 6. Pero 6 * 1 es igual a 6 según la primera parte de la definición. Entonces: 3

6 * 3 = 6 * 2 + 6 = 6 * 1 + 6 + 6 = 6 + 6 + 6 = 18 Convertir la definición anterior en un algoritmo recursivo. 17. Convierta el siguiente método iterativo en uno recursivo. El método clacula un valor aproximado de e; la base de los logaritmos naturales, sumando las series: 1 + 1/1! + 1/2! +...+1/n! Hasta que los terminos adicionales no afecten a la aproximacion: static double loge() double en1, delta, fact; int n; en1 = fact = delta = 1.0; n = 1; do en1 = delta; n++; fact * = n; delta = 1.0 / fact; while (en1!= en1 + delta); return en1; 18. Defina el Máximo Común Divisor de dos enteros x e y por: maximocomundivisor(x,y) = y sí y <= x y x % y = 0 maximocomundivisor(x,y) = maximocomundivisor(y,x) si x < y maximocomundivisor(x,y) = maximocomundivisor(y,x % y) para cualquier otro caso Escriba un método recursivo para calcular maximocomundivisor(x,y) 19.Escribir un programa y un método recursivo que liste todos los subconjuntos de dos letras para un conjunto dado de letras: [A, C, E, K] [A, C], [A, E], [A, K], [C, E], [C, K], [E, K] 20. Definimos combinaciones(n,k) como el número de combinaciones de n elementos agrupados de k en k, es decir, el numero de los diferentes grupos que se pueden formar con miembros dado un conjunto de n miembros para elegir. Así, por ejemplo, si n = 4 (A,B,C,D) C(4,2) = 6 que serán: (A,B), (A,D), (A,C), (B,C), (B,D), (C,D). Matemáticamente combinaciones(n,k) se define: combinaciones(n,1) = 1 combinaciones(n,n) = 1 combinaciones(n,k) = combinaciones (n-1, k-1)+ combinaciones (n-1,k) n > k, k >1. a) encontrar el valor de C(8,5) b) Escribir un método recursivo para calcular combinaciones(n,k). 21. Realizar un método recursivo que calcule la función de Ackermann definida de la siguiente forma: A(m,n) = n+1 si m = 0 A(m,n) = A(m-1,1) si n = 0 A(m,n) = A(m-1,A(m,n-1)) si m > 0 y n > 0 Escribir el método Ackermann de manera iterativa. 22. Dado un array de enteros, escribir algoritmos recursivos para: a) Mostrar el array de forma inversa. 4

b) Buscar en el array un determinado valor. c) Sumar los elementos del array. d) Buscar el valor máximo de los elementos del array. e) Buscar el valor máximo en los elementos de un sub-array. 23. Escribir un método recursivo que calcule los números de Fibonacci. La serie se representa de la siguiente manera: Fib(n) = 1 si n = 1, n = 2 Fib(n-1)+Fib(n-2) si n > 2 Fib(1) = 1 Fib(2) = 1 Fib(3) = Fib(1) +Fib(2) Fib(4) = Fib(2) +Fib(3) 5