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