14.06.2013 Views

Tema 5. Recursividad 1. ¿Qué valor devolverá el método restados si ...

Tema 5. Recursividad 1. ¿Qué valor devolverá el método restados si ...

Tema 5. Recursividad 1. ¿Qué valor devolverá el método restados si ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Metodología y Tecnología de la Programación ESI-UCLM<br />

<strong>Tema</strong> <strong>5.</strong> <strong>Recur<strong>si</strong>vidad</strong><br />

<strong>1.</strong> <strong>¿Qué</strong> <strong>valor</strong> <strong>devolverá</strong> <strong>el</strong> <strong>método</strong> <strong>restados</strong> <strong>si</strong> le pasamos <strong>el</strong> <strong>valor</strong> 5? ¿Y <strong>si</strong> le pasamos 6?<br />

int <strong>restados</strong>(int n) {<br />

int <strong>valor</strong>=0;<br />

if (n==2) {<br />

<strong>valor</strong>=0;<br />

}<br />

<strong>el</strong>se {<br />

<strong>valor</strong>= n+<strong>restados</strong>(n-2);<br />

}<br />

return <strong>valor</strong>;<br />

}<br />

2. La función ficticia llamada “recur” de un número se calcula de la <strong>si</strong>guiente forma:<br />

recur(1)=1;<br />

recur(n)=(n-3)+recur(n-1)<br />

Implemente un <strong>método</strong> recur<strong>si</strong>vo que calcule la función recur para cualquier número que se le<br />

pase como parámetro. El número que se pasa ya cumple la condición de ser mayor o igual a <strong>1.</strong><br />

3. ¿Cuál es <strong>el</strong> resultado d<strong>el</strong> <strong>si</strong>guiente programa?<br />

class Ejercicio {<br />

public static void main (String[]args) {<br />

metodo1(4);<br />

}<br />

public static void metodo1(int n) {<br />

if (n


Metodología y Tecnología de la Programación ESI-UCLM<br />

6. Escriba un <strong>método</strong> recur<strong>si</strong>vo que calcule la potencia n de un número x. Use este <strong>método</strong> en un<br />

programa que lea por línea de órdenes <strong>el</strong> <strong>valor</strong> de x y de n y calcule e imprima por pantalla <strong>el</strong> resultado<br />

de la potencia.<br />

7. ¿Cuál es <strong>el</strong> error d<strong>el</strong> <strong>si</strong>guiente <strong>método</strong> que pretende evaluar un sumatorio? ¿Cómo corregiría <strong>el</strong> error?<br />

int suma(int numero){<br />

if (numero ==0)<br />

return 0;<br />

<strong>el</strong>se<br />

numero+suma(numero-1);<br />

}//Fin d<strong>el</strong> <strong>método</strong> suma<br />

8. ¿Cuál es la salida d<strong>el</strong> <strong>si</strong>guiente programa? ¿Y <strong>si</strong> n vale 5?<br />

class Indirecta {<br />

public static void main(String [] args) {<br />

int n=6;<br />

m1(n);<br />

}<br />

public static void m1(int n) {<br />

// El caso base es n=0<br />

if (n == 0) {<br />

System.out.println("En m1 con N: " +n+"\n");<br />

}<br />

<strong>el</strong>se { // Caso inductivo<br />

m2(n);<br />

System.out.println("En m1 despues de la llamada recur<strong>si</strong>va a m1: "+n);<br />

}<br />

}<br />

public static void m2(int n) {<br />

System.out.println("En m2 con N: " +n);<br />

m3(n-1);<br />

System.out.println("En m2 despues de la llamada recur<strong>si</strong>va a m1: "+n);<br />

}<br />

public static void m3(int n) {<br />

System.out.println("En m3 con N: " +n);<br />

m1(n-1);<br />

System.out.println("En m3 despues de la llamada recur<strong>si</strong>va a m1: "+n);<br />

}<br />

}//fin clase Indirecta<br />

9. Dada la <strong>si</strong>guiente r<strong>el</strong>ación de recurrencia para evaluar <strong>el</strong> polinomio de Chebyshev de grado n para un x<br />

dado:<br />

T0(x)=1 para un polinomio de grado 0.<br />

T1(x)=x para un polinomio de grado <strong>1.</strong><br />

Tn(x)=2xTn-1(x)-Tn-2(x) para un polinomio de grado distinto de 0 y 1<br />

Implemente un <strong>método</strong> recur<strong>si</strong>vo que aplique dicha r<strong>el</strong>ación. Escriba un programa que conociendo <strong>el</strong><br />

grado d<strong>el</strong> polinomio, calcule e imprima con 4 decimales <strong>el</strong> <strong>valor</strong> de dicho polinomio para un x dado. Los<br />

datos de entrada se deben proporcionar usando la clase Scanner y para la salida se usará <strong>el</strong> <strong>método</strong><br />

printf.<br />

10. Construir un programa que obtenga <strong>el</strong> término n de la serie de Fibonacci. El <strong>valor</strong> de n deberá leerse<br />

por teclado usando la clase Scanner. La serie de Fibonacci es una secuencia de enteros po<strong>si</strong>tivos, cada<br />

uno de los cuales es la suma de los dos anteriores. Los dos primeros números de la secuencia son 0 y 1,<br />

La serie se define como:<br />

Fibonacci=n para n1<br />

El programa tendrá, además d<strong>el</strong> <strong>método</strong> main, un <strong>método</strong> recur<strong>si</strong>vo para calcular dicho término. El<br />

<strong>método</strong> main deberá llamar al <strong>método</strong> e imprimir, usando printf, <strong>el</strong> término n de la serie. Si <strong>el</strong> usuario<br />

introduce un <strong>valor</strong> negativo, <strong>el</strong> programa debe emitir un aviso.<br />

Ejercicios tema 5 Página: 2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!