Repaso de Recursividad - Universidad de Carabobo

Anuncio
UNIVERSIDAD DE CARABOBO
FACULTAD EXPERIMENTAL DE CIENCIAS Y TECNOLOGÍA
DEPARTAMENTO DE COMPUTACIÓN
GRUPO DE DESARROLLO DE SOFTWARE Y SISTEMAS
CS218 − ALGORITMOS Y PROGRAMACIÓN II
PRÁCTICA 0
(RECURSIVIDAD)
1. Defina en forma recursiva identificando cada una de las partes de la definición:
•
•
•
•
Arbol
Arbol binario
Lista
Secuencia
•
•
•
•
Número par
Número impar
Número natural
A + B: A, B ∈ N
•
•
•
•
A ∗ B: A, B ∈ N
Y
X : X ∈ R, y ∈ N
Fib(n): n ∈ N
n!: n ∈ N
2. Muestre los estados por los cuales pasa la pila de registros de activación al ejecutarse en un
algoritmo la instrucción f := FIB(4). Donde FIB(n) es una función recursiva que calcula el número
de fibonacci asociado a n.
3.
Elaborar un algoritmo recursivo que calcule la suma de dos números naturales a y b.
4. Elaborar un algoritmo recursivo que calcule la diferencia de dos números naturales a y b.
5. Elaborar un algoritmo recursivo que calcule el producto de dos números naturales a y b.
6. Elaborar un algoritmo recursivo que, dado un número real X y un entero no negativo Y, calcule
Y
X .
7. Elaborar un algoritmo recursivo que, dado un número entero no negativo N, calcule su
equivalente en binario.
8. Modificar el algoritmo anterior de manera tal que sea capaz de convertir un número entero no
negativo N en su equivalente en cualquier otra base.
9. Elaborar una función recursiva que, dado un arreglo de N enteros ordenado ascendentemente
y un entero a, retorne la posición de a en el arreglo. Si a no se encuentra en el arreglo, la
función debe retornar el valor –1. Implemente el algoritmo de Búsqueda Binaria.
10. Elaborar un algoritmo recursivo que, dado un arreglo de N enteros, calcule la suma de sus
elementos.
11. Elaborar un algoritmo recursivo que, dada una secuencia de enteros, calcule su longitud.
12. Elaborar un algoritmo recursivo que, dada una secuencia de enteros y un entero n, determine
si n se encuentra en la lista.
13. Elaborar un algoritmo recursivo que, dada una secuencia de enteros, calcule la cantidad de
números positivos y la cantidad de números negativos de la misma.
14. Elaborar un algoritmo recursivo que, dada una secuencia de caracteres, produzca la secuencia
invertida.
15. Elaborar un algoritmo recursivo que, dadas dos secuencias de caracteres, determine si dichas
secuencias son iguales.
16. Considere el siguiente juego:
0
1
2
3
...
N-1
...
N
Se tiene un camino de mosaicos. Cada mosaico está numerado comenzando desde el 0. Los
jugadores juegan sobre el camino desplazándose desde un mosaico al siguiente, pero pueden
también saltar un mosaico. El juego está basado entonces en dos desplazamientos
elementales:
N-1
N
N-2
N-1
N
Al comienzo, los jugadores se encuentran en el mosaico 0. El problema consiste en encontrar
el número de caminos posibles para alcanzar un mosaico N cualquiera comenzando desde el
mosaico 0.
17. El Algoritmo de Euclides para hallar el máximo común divisor (MCD) de dos enteros positivos
m y n se puede definir recursivamente de la siguiente manera:
mcd(m,n) = n si n < m y n divide a m
mcd(m.n) = mcd(n,m) si m < n
mcd(m,n) = mcd(n, resto de m dividido entre n) en otro caso
•
•
Exprese la definición anterior utilizando la notación de McCarthy
Elaborar un algoritmo recursivo que calcule el máximo común divisor de dos enteros
positivos m y n. Trate de que la solución sea lo más eficiente posible.
18. Los polinomios de Hermite de grado n, Hn(x), se definen de manera recursiva de la siguiente
manera:
H0(x) = 1
H1(x) = 2x
Hn(x) = 2x∗Hn-1(x) - 2(n-1)∗Hn-2(x)
•
•
si n > 1
Exprese la definición anterior utilizando la notación de McCarthy
Escribir una función recursiva que, dado un entero no negativo n, calcule el polinomio de
Hermite de grado n.
19. Los polinomios de Legendre de grado n, Ln(x), se definen de manera recursiva de la siguiente
manera:
L0(x) = 1
L1(x) = x
Ln(x) = [(2n-1)∗x∗Ln-1(x) - (n-1)∗Ln-2(x)] / n
•
•
Si n > 1
Exprese la definición anterior utilizando la notación de McCarthy
Escribir una función recursiva que, dado un entero no negativo n, calcule el polinomio de
Legendre de grado n.
20. La función de Ackermann se define de manera recursiva para enteros no negativos de la
siguiente manera:
A(m,n) =
•
•
•
n+1
si m = 0 y n ≥ 0
A(m - 1, 1)
si m > 0 y n = 0
A(m - 1, A(m, n - 1))
si m > 0 y n > 0
Exprese la definición anterior utilizando la notación de McCarthy
A partir de la definición anterior pruebe que A(2, 2) = 7.
Escribir una función recursiva que, dados dos enteros no negativos m y n, calcule el valor de
A(m, n).
21. La función F(n) se define como:
F(n) =
•
•
•
2
1
n + F(n - 2)
(n – 1) + F(n – 1)
si n 0
si n = 1
si (n > 2) ^ ((n mod 2) 0)
si (n 2) ^ ((n mod 2) = 0)
Exprese la definición anterior utilizando la notación de McCarthy
A partir de la definición anterior calcule F(8).
Escribir una función recursiva que, dado un entero no negativo n, calcule el valor de F(n).
22. Se define la secuencia generalizada de Fibonacci de f0 y f1 como la secuencia
gfib(f0, f1, 0), gfib(f0, f1, 1), gfib(f0, f1, 2), gfib(f0, f1, 3), …, gfib(f0, f1, n-1), gfib(f0, f1, n)
donde:
gfib(f0, f1, 0) = f0
gfib(f0, f1, 1) = f1
gfib(f0, f1, n) = gfib(f0, f1, n-1) + gfib(f0, f1, n-2)
Escribir una función recursiva para calcular gfib(f0, f1, n).
23. Determine qué calcula la siguiente función recursiva:
Pre {n ≥ 0}
función F
Comienzo
si ( n
F
sino
F
fsi;
fin;
(n : Entero) : Entero;
= 0 ) entonces
← 0
← n + F(n-1)
si n > 1
Descargar