Metodología y Tecnología de la Programación ESI-UCLM Tema 5. Recursividad 1. ¿Qué valor devolverá el método restados si le pasamos el valor 5? ¿Y si le pasamos 6? int restados(int n) { int valor=0; if (n==2) { valor=0; } else { valor= n+restados(n-2); } return valor; } 2. La función ficticia llamada “recur” de un número se calcula de la siguiente forma: recur(1)=1; recur(n)=(n-3)+recur(n-1) Implemente un método recursivo que calcule la función recur para cualquier número que se le pase como parámetro. El número que se pasa ya cumple la condición de ser mayor o igual a 1. 3. ¿Cuál es el resultado del siguiente programa? class Ejercicio { public static void main (String[]args) { metodo1(4); } public static void metodo1(int n) { if (n<2) System.out.print('X'); else { metodo1(n-1); System.out.print('O'); } } } 4. ¿Cuál es el resultado del siguiente programa? class Ejercicio { public static void main(String[]args) { metodoA(3); } public static void metodoA(int n) if (n<1){ System.out.print(“Libro”); } else { metodoA(n-1); System.out.print(“Revista”); } } { } 5. Cuenta la leyenda que en el gran templo de Benarés existe una base de bronce de la que sobresalen tres varillas de diamante. En el momento de la creación, Dios colocó 64 discos de oro ensartados en la primera varilla, colocados de abajo arriba en orden de tamaño decreciente; esta es la torre de Brahma. Los sacerdotes están tratando de pasar la pila de la primera varilla a la segunda, sometidos a las leyes de Brahma que indican que sólo se puede mover un disco a la vez, y que en ningún momento se puede colocar un disco más grande sobre uno más pequeño. Se cuenta con la tercera varilla para colocar los discos temporalmente. Cuando todos los discos hayan sido transferidos, la torre, los sacerdotes, el templo, y todo el mundo desaparecerá con un estruendo (Enunciado original del hoy conocido como problema de las torres de Hanoi). Desarrolle un programa con un método recursivo que solucione el problema de las torres de Hanoi para un número arbitrario de discos. El programa debe imprimir la secuencia precisa de transferencia de los n discos de una varilla a otra. Ejercicios tema 5 Página: 1 Metodología y Tecnología de la Programación ESI-UCLM 6. Escriba un método recursivo que calcule la potencia n de un número x. Use este método en un programa que lea por línea de órdenes el valor de x y de n y calcule e imprima por pantalla el resultado de la potencia. 7. ¿Cuál es el error del siguiente método que pretende evaluar un sumatorio? ¿Cómo corregiría el error? int suma(int numero){ if (numero ==0) return 0; else numero+suma(numero-1); }//Fin del método suma 8. ¿Cuál es la salida del siguiente programa? ¿Y si n vale 5? class Indirecta { public static void main(String [] args) { int n=6; m1(n); } public static void m1(int n) { // El caso base es n=0 if (n == 0) { System.out.println("En m1 con N: " +n+"\n"); } else { // Caso inductivo m2(n); System.out.println("En m1 despues de la llamada recursiva a m1: "+n); } } public static void m2(int n) { System.out.println("En m2 con N: " +n); m3(n-1); System.out.println("En m2 despues de la llamada recursiva a m1: "+n); } public static void m3(int n) { System.out.println("En m3 con N: " +n); m1(n-1); System.out.println("En m3 despues de la llamada recursiva a m1: "+n); } }//fin clase Indirecta 9. Dada la siguiente relación de recurrencia para evaluar el polinomio de Chebyshev de grado n para un x dado: T0(x)=1 para un polinomio de grado 0. T1(x)=x para un polinomio de grado 1. Tn(x)=2xTn-1(x)-Tn-2(x) para un polinomio de grado distinto de 0 y 1 Implemente un método recursivo que aplique dicha relación. Escriba un programa que conociendo el grado del polinomio, calcule e imprima con 4 decimales el valor de dicho polinomio para un x dado. Los datos de entrada se deben proporcionar usando la clase Scanner y para la salida se usará el método printf. 10. Construir un programa que obtenga el término n de la serie de Fibonacci. El valor de n deberá leerse por teclado usando la clase Scanner. La serie de Fibonacci es una secuencia de enteros positivos, cada uno de los cuales es la suma de los dos anteriores. Los dos primeros números de la secuencia son 0 y 1, La serie se define como: Fibonacci=n para n<=1 Fibonaccin=Fibonaccin-1+Fibonaccin-2 para todo n>1 El programa tendrá, además del método main, un método recursivo para calcular dicho término. El método main deberá llamar al método e imprimir, usando printf, el término n de la serie. Si el usuario introduce un valor negativo, el programa debe emitir un aviso. Ejercicios tema 5 Página: 2