FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información. Ejercicios de recursividad

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

Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas

Primer Parcial. Programación 1 Instituto de Computación Año 2017

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Módulo 8: Primitivas en Pascal

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

Introducción al Lenguaje de Programación Ada

Primer Parcial. Programación 1 Instituto de Computación Año 2011

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

Trabajo Práctico 8 División de Problemas en Subproblemas Uso de Procedimientos y Funciones

Declaración de Procedimientos

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

Computación I Sistemas de Numeración. Curso 2010 Facultad de Ingeniería Universidad de la República

Esquemas repetitivos en Fortran 90

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

FUNDAMENTOS DE OBJECT PASCAL

Calidad del Software. Ejercicios Tema 4 Conceptos de pruebas

Trabajo Práctico N 9 Recursividad

Concepto de Recursión. Características de algoritmos recursivos. Ejemplos

FUNDAMENTOS DE PROGRAMACIÓN. 1º ING. INFORMÁTICA (Plan 2000) 2ª Convocatoria. 21 de junio de 2001

Bloque 1. Conceptos y técnicas básicas en programación

Tema 5.- Recursividad

Subrutinas. Subrutinas. Erwin Meza Vega

Computación I Sistemas de Numeración. Curso 2015 Facultad de Ingeniería Universidad de la República

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

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

Tema 2. Tipos predefinidos

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles.

6. Estructuras básicas de control 1. Pseudocódigo

Estructuras de Control. Secuencia y Selección

28/10/2016. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias. Procesamiento de Secuencias

4. Operadores Operador asignación

Estructuras de Control. Secuencia y Selección

Slide 1. ordenación de tres números en forma. creciente.

8.1.- FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN TURBO PASCAL.

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

Generación de números aleatorios con distribución uniforme

Funciones: Pasos por Referencia Recursividad

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

LABORATORIO DE PROGRAMACIÓN II Problemas HOJA 1 RECURSIVIDAD

Ejercicios Tema 6. Funciones

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa


Recursividad. Definición. Diseño de Algoritmos Recursivos

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

Motivación. 4: Control de flujo Condicionales. Motivación. Condicionales

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

ALGORITMOS Y ESTRUCTURAS DE DATOS EJERCICIOS RESUELTOS SEGUNDA PARTE

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

RESUMEN GAMBAS. TIPOS DE DATOS Y DECLARAR VARIABLE: DIM nombre_variable AS

Estructura de Datos y de la Información

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

Datos y tipos de datos

Fundamentos de Informática Examen 18 de Septiembre de 2006 Mecánica y Electricidad

Programación y Computación Ingenierías. Dr. Eric Jeltsch F. FUNCIONES Y PROCEDIMIENTOS. Universidad de La Serena.

PHP: Lenguaje de programación

LISTAS DOBLES y multiples

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

FUNDAMENTOS DE INFORMÁTICA

Ejercicio 1.- En las construcciones siguientes para qué valores de la variable RangoI se ejecutará la sentencia de asignación?

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

Programación en Pascal

Tema 2: La clase string. Índice. Notas. Programación 2. Curso Notas. Definición Declaración Entrada / salida Métodos Operaciones

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

UTN FRLP Ing. en Sistemas de Información Algoritmos y Estructura de Datos Trabajos Prácticos Curso 2010

Introducción a la Programación Ingenieria en Informática Junio 2008

Tema#2. Tipos de Datos 10

Procedimientos, Funciones y Recursividad

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

TEMA 1. Recursividad. Recursividad CONTENIDO DEL TEMA

Métodos CON valor de retorno

Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r

Complejidad de algoritmos recursivos

Dra. Jessica Andrea Carballido

SISTEMAS NUMÉRICOS. Conocer los diferentes sistemas numéricos y su importancia en la informática y la computación

Manual de turbo pascal

1. (0,25 puntos) A que número binario es equivalente el decimal 138?

Curso de Programación 1

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

GUÍA BÁSICA DE SCHEME v.4

Estatutos de Control C# Estatutos de Decisión (Selección)

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Tema 3.- Predicados y sentencias condicionales

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

324 MR Versión 1 Primera Integral 1/5 Lapso 2009/2. ASIGNATURA: Computación II CÓDIGO: 324 MOMENTO: Primera Integral FECHA DE APLICACIÓN: 24/10/09;

TAD. TAD Conjunto Análisis del TAD Conjunto Posibles implemantaciones A.E.D.

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

1. Suma de dos números introducidos por teclado. 2. Comparación de dos números introducidos por teclado. program suma; uses crt;

Manos a la obra: Recursión, división y listas

Tema 7: Árbol Binario

Ejercicios sobre recursividad

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

ALGORITMOS Y ESTRUCTURAS DE DATOS. Ejercicios Resueltos CUADERNILLO DE PRACTICA

Práctica 5. Contenido: Subprogramas (funciones y procedimientos). Parámetros por valor y por referencia.

Transcripción:

H AC LUCE FACULTADE DE INFORMÁTICA Departamento de Computación Estructura de Datos e da Información Ejercicios de recursividad 1. Determinar qué operación realiza: //x>=0, y>0 function funcion_x (x,y: integer):integer; if (x =0) or (x<y) then funcion_x:= 0 funcion_x := 1+ funcion_x (x-y, y); La división entera 2. Considere el siguiente procedimiento P: procedure P(num:integer); if (num>=1) and (num <=8) then P(num-1); write (num:1); end writeln end {P}; Qué salida producen las llamadas P(3), P(7), P(10): a) en el procedimiento original, P(3)=< salto de linea > 123 P(7)=< salto de linea > 1234567 b) si reemplazamos Num-1 por Num+1, P(3)=< salto de linea > 876543 P(7)=< salto de linea > 7654321 c) si intercambiamos el write y la llamada recursiva, y P(3)=321 < salto de linea > P(7)=7654321 < salto de linea > 1

d) si insertamos una copia de la instrucción write antes de la llamada recursiva. P(3)=321 < salto de linea > 123 P(7)=7654321 < salto de linea > 1234567 3. Dada la siguiente función trace la secuencia de llamadas y retornos de las funciones para F(1,5) y F(8,3). Function F (Num1, Num2: integer): integer; if num1 > num2 then f:= 0 if num2 = num1 + 1 then f:= 1 f:= f (num1 + 1, num2-1) + 2 F(1,5) Llamadas F(2,4), F(3,3), F(4,2) Retornos F(4,2)=0,F(3,3)=F(4,2)+2=0+2=2, F(2,4)=F(3,3)+2=2+2=4,F(1,5)=F(2,4)+2=4+2=6 F(8,3) Retorna directamente 0 4. Qué calculan las siguientes funciones recursivas (suponer n>=0 para los apartados a-d)? a) if n = 0 then F:= 3 F:= n * F (n-1) 3 n! b) Function F (x: real; n: integer): real; if n = 0 then F:= 0 F:= x + F (x, n-1) n x c) if n < 2 then 2

F:= 0 F:= 1 + F (n div 2) La potencia de 2 más cercana a n d) if n = 0 then F:= 0 F:= F (n div 10) + (n mod 10) Suma de las cifras que componen n e) if n < 0 then F:= F(-n) if n < 10 then F:= n F:= F (n div 10) La primera cifra de n 5. Escribe versiones no recursivas (iterativas) de las funciones del ejercicio anterior. 6. Considera el siguiente procedimiento: procedure Q (num1, num2: integer); if num2 <= 0 then writeln Q (num1-1, num2-1); write (num1:1); Q (num1+1, num2-1); end a) Qué salida produce Q(14,3) 3

12 13 14 14 14 15 16 b) Si movemos la instrucción write antes de la llamada recursiva, qué salida produce Q(14,4)? 141312 14 1514 16 7. Realiza una función recursiva en Pascal que realice la operación potencia(x,n)= x n, siendo x, n 0 function potencia (x,n: integer): integer; if n=0 then potencia:=0 potencia:=x*potencia(x,n-1); 8. Desarrolla la función recursiva Par (n: integer): boolean que devuelve true si n es par y false en caso contrario, siendo x 0. Puedes basarte en la idea de que 0 es par, y que la paridad de cualquier otro entero positivo es la opuesta que la del entero anterior. function par (n: integer): boolean; if n=0 then par:=true par:=not(par(n-1)); 9. Es correcto el siguiente código desde el punto de vista de la verificación? (suponemos n 0). procedure recursivo(n: integer); if n=0 then writeln( Llegamos al final ) recursivo(n div 2+1); 4

Es incorrecto: si n > 0 se generan llamadas recursivas infinitas del tipo recursivo(1) 10. Implementar una función recursiva que devuelva la suma de los elementos de un vector v comprendidos entre la posición ini y la posición fin. function suma (v:vector ; ini,fin : integer): integer; Precond: ini <= f in son posiciones válidas en el array if ini=fin then suma := v[ini] suma := v[ini] + suma (v,ini+1,fin); 11. Implementar un procedimiento recursivo que imprima los dígitos de un número entero positivo en orden inverso. procedure imprimirinverso (n: integer); var resto:integer; resto:=n div 10; if resto=0 (*solo un dígito*) then write(resto:1) imprimirinverso(resto); write(n mod 10); 12. Implementar una función recursiva a la cual se le pasa un string por parámetro y devuelve dicho string invertido (ejemplo: Invertir( hola ) = aloh ). Puedes usar las siguientes funciones: Copy(S:string;Index,Count:Integer):string que permite extraer parte de un string, siendo S el string original, Index el índice en donde empieza el substring a extraer y Count el número de caracteres de dicho substring. Length(S:string):integer, que devuelve el tamaño de un string Concat(S1,S2[,S3,...,Sn]:string):string que devuelve un único string resultado de concatenar S1,S2,... Sn. 5

procedure InvertirCadena (input: string; var output:string); var tamano:integer; tamano:=length(input); if (tamano=0) or (tamano=1) (*solo un caracter*) then output:=input InvertirCadena(copy(input,2,tamano), output); output:=concat(output,input[1]); 13. Realiza un procedimiento recursivo procedure ConvertirBinario(n:integer) que, siendo n 0 imprima por pantalla su representación en binario. Para convertir un número entero decimal (en base 10) a un número entero binario (en base 2) hay que seguir los siguientes pasos: a. Dividir el número entre dos (usando la división entera, operador div) y repetir el proceso hasta obtener un cociente cero b. El número binario resultante se obtiene de los restos (operador mod) de las divisiones pero en sentido inverso procedure ConvertirBinario(n:integer); if (n div 2 = 0) then write(n mod 2) ConvertirBinario(n div 2); write(n mod 2); 6