Вы находитесь на странице: 1из 4

E.T.S.I. Telecomunicacin. Prog.

Modular o

Recursividad

Recursividad
Programacin Modular o
(1o de Ingenier de Telecomunicacin) a o
UNIVERSIDAD DE MALAGA E.T.S.I. TELECOMUNICACION

1. Determina qu calcula la siguiente funcin recursiva. Escribe una funcin iterae o o tiva que realice la misma tarea. ALGORITMO N func(E N n) VAR N sal INICIO SI n == 0 ENTONCES sal = 0 SINO sal = n + func(n-1) FINSI DEVOLVER sal FIN 2. Disea la versin iterativa del siguiente algoritmo recursivo: n o ALGORITMO Rec(E N n) INICIO SI NO f(n) ENTONCES {cualquier grupo de sentencias que no modifiquen n} Rec(g(n)) FINSI FIN donde las cabeceras de f y g se denen como: ALGORITMO B f(E N n) ALGORITMO N g(E N n) 3. Considera la siguiente funcin recursiva: o ALGORITMO Z p(E Z x) VAR Z result INICIO SI x < 3 ENTONCES result = x SINO result = p(x-1) * p(x-3) FINSI DEVOLVER result FIN Disea una funcin recursiva que calcule el nmero de productos realizados al n o u ejecutar la funcin p cuando se llama con el argumento n. o

E.T.S.I. Telecomunicacin. Prog. Modular o

Recursividad

4. Dada la funcin recursiva: o ALGORITMO Z f(E Z x) VAR Z result INICIO SI x>100 ENTONCES result = x-10 SINO result = f(f(x+11)) FINSI DEVOLVER result FIN Estudia cul es su comportamiento. Podr disear f de una manera ms a as n a sencilla? 5. Considera la siguiente funcin recursiva: o Ackerman(m, n) = n+1 Ackerman(m 1, 1) Ackerman(m 1, Ackerman(m, n 1)) si m = 0 si m > 0 n = 0 si m > 0 n > 0

Esta funcin, llamada funcin de Ackermann, es interesante porque crece rpio o a damente con respecto a los valores m y n. Comprobar que Ackermann(1, 2) vale 4 y que Ackermann(3, 2) vale 29. Cuntas llamadas recursivas se hacen cuando a queremos evaluar Ackermann(1,2)? 6. Para cada uno de los apartados que siguen, implementa una funcin (o proceo dimiento, segn convenga) recursivo que realice la tarea especicada: u a) escribir n caracteres * en pantalla. b) escribir los nmeros del 1 al n. u c) escribir los nmeros del n al 1. u d ) calcular la suma de dos nmeros naturales utilizando unicamente las funu ciones suc y pred, que devuelven, respectivamente el nmero anterior y u siguiente al valor que se le pasa. Ten en cuenta que SumaR(a, b) = a SumaR(Suc(a), P red(b)) si b = 0 si b > 0

e) calcular la potencia de un nmero usando como operacin bsica el prou o a ducto. f ) escribir las cifras de un nmero natural. u g) encontrar el mximo comn divisor de dos nmeros siguiendo el algoritmo a u u de Euclides: mcd(a, b) = mcd(b, a) mcd(a b, b) a si a < b si a > b si a = b

h) leer una secuencia de caracteres de longitud arbitraria e imprimirla en orden inverso.

E.T.S.I. Telecomunicacin. Prog. Modular o

Recursividad

7. Para cada uno de los apartados que siguen, implementa una funcin (o proceo dimiento, segn convenga) recursivo que realice la tarea especicada: u a) imprima los elementos de un array de longitud n en orden inverso. b) sume los n elementos de un array. c) evale si dos arrays son iguales (tienen los mismos elementos y en el mismo u orden). d ) localice el m nimo y el mximo de un vector de naturales no vac dado. a o e) implemente el algoritmo de bsqueda secuencial de forma recursiva. u f ) dado un vector de enteros, devuelva un valor booleano que indique si alguno de los elementos del vector coincide con la suma de todos los que le preceden. 8. Implementar soluciones recursivas para ordenar un array siguiendo diferentes mtodos: e a) mediante el mtodo de seleccin. Se selecciona el mayor de los elementos, e o se separa y se ordenan los dems. a b) mediante el mtodo denominado ordenacin por mezcla, o Mergesort: e o Sea k el ndice del elemento mitad del array. Ordena recursivamente los elementos hasta a[k], incluyndolo. e Ordena recursivamente los elementos siguientes. Mezcla de manera ordenada los dos subarrays ordenados en un unico array ordenado. Nota: Para la mezcla ordenada se necesita una array auxiliar. 9. Consideremos los pal ndromos sobre un alfabeto formado slo por letras minscuo u las. Sea P(n) el nmero de pal u ndromos de longitud n. Disea una funcin ren o cursiva para calcular P(n). 10. Disea algoritmos recursivos para determinar si una cadena de caracteres que n se pasa como parmetro es: a a) un identicador vlido. a b) un pal ndromo. c) una palabra perteneciente al lenguaje L = {w/w = an bn , n 0}. 11. Disea un algoritmo recursivo que, dado un array de enteros, devuelva el kn simo elemento ms pequeo del array, es decir, si el array contiene los elementos e a n (4,7,3,6,8,1,9,2) y k=5, el algoritmo deber devolver 6. a Nota: Utiliza el algoritmo Particion visto en clase en el mtodo de ordenacin e o Quicksort. 12. Desarrollar algoritmos recursivos cuya funcin sea: o a) dada una matriz cuadrada, comprobar si es simtrica. e b) resolver el determinante de una matriz tridiagonal y simtrica. Una matriz e tridiagonal simtrica slo tiene elementos distintos de 0 en la diagonal e o principal y las dos diagonales adyacentes.

E.T.S.I. Telecomunicacin. Prog. Modular o

Recursividad

1 2 0

2 2 3

3 3

n1 n

0 0 0 n n

El valor del determinante para una matriz de rango r es: det(r) = 1 2 1 2 2 2 r det(r 1) r det(r 2) si r = 1 si r = 2 si r > 2

13. Disear un algoritmo recursivo que devuelva el tamao de una determinada n n mancha en un tejido. Una mancha est formada por # unidos. Dos # estn a a unidos si son vecinos horizontal, vertical o diagonalmente. Si en el dibujo empezamos en la posicin (1, 3), la mancha que incluye esa casilla contiene cinco o elementos. Si empezamos en la posicin (3, 3), la mancha contiene ocho elemeno tos. 0 0 1 2 3 4 1 # # # 2 # 3 # # # 4 # # # 5 6 # # # 7 #

14. Disear un algoritmo recursivo que encuentre el camino que ha de seguir un n caballo de ajedrez para pasar una sola vez por todas las casillas de un tablero de ajedrez.

Вам также может понравиться