Download Programación en Java

Document related concepts

Recursión wikipedia , lookup

Recursión primitiva wikipedia , lookup

Relación de recurrencia wikipedia , lookup

Caml wikipedia , lookup

Cálculo lambda wikipedia , lookup

Transcript
Programación en Java Ejercicios de métodos II
1. Encuentre el error y corríjalo del siguiente método recursivo: static int suma( int n) {
if ( n == 0)
return 0;
else
return n + suma(n);
}
2. Escriba un método recursivo potencia(base,exponente) que, cuando sea llamado, devuelva 𝑏𝑎𝑠𝑒 !"#$%!%&! Por ejemplo, potencia(3,4) = 3 * 3 * 3 * 3. Asuma que el exponente es un entero mayor o igual a 0. Pista: El paso de recursividad deberá usar la siguiente relación: 𝑏𝑎𝑠𝑒 !"#$%!%&! = 𝑏𝑎𝑠𝑒 ∙ 𝑏𝑎𝑠𝑒 !"#$%!"#!!! La condición de finalización ocurre cuando el exponente es igual a 1 porque 𝑏𝑎𝑠𝑒 ! = 𝑏𝑎𝑠𝑒 3. Escriba un programa que calcule el máximo común divisor de dos números de manera recursiva. El máximo común divisor (mcd) de dos números es el mayor entero que divide (con resto 0) a los dos números. La definición recursiva del mcd(x,y) es la siguiente: Si y es igual a 0 entonces el mcd(x,y) es x, en otro caso mcd(x,y) = mcd(y, x%y) donde % representa al operador módulo. 4. ¿Qué hace este método? // El parámetro b tiene que ser positivo para evitar una recursión
infinita
static int misterio( int a, int b) {
if (b == 1)
return a;
else
return a + misterio(a,b-1);
}
5. Es interesante observar como funciona la recursión. Modifique el método factorial recursivo visto en clase para imprimir el parámetro número. Para cada llamada recursiva muestre en una línea lo que vale el parámetro numero, la llamada que se hace (Ej 3 * factorial(2) ) y el valor que finalmente devuelve cada llamada. Haga lo posible para que la salida sea todo lo expresiva que sea posible. Para ello, intente que cada nueva llamada recursiva se muestre con un nivel de indentación superior. static int factorial (int numero) {
if (numero<=1)
return 1;
else
return numero * factorial(numero-1);
}
Ejemplo:
factorial(4)
4 * factorial(3)
factorial(3)
3 * factorial(2)
factorial(2)
2 * factorial(1)
factorial(1)
Devuelve 1
Devuelve 2
Devuelve 6
Devuelve 24 Ejercicios Extra 6. Escriba un método que cree e inicialice un array de enteros en función de los valores pasados como los argumentos del programa por la línea de mandatos. Para poder convertir un String que contiene un número al valor entero correspondiente utilice el método Integer.parseInt(). Por ejemplo, Integer.parseInt(“2”) devolvería el entero 2. 7. Escribir un programa que, dado un parámetro n (parámetro del programa, no leído por la entrada estándar) devuelva el n‐ésimo número de la serie de Fibonacci. Cada número de Fibonacci es la suma de los dos números que le preceden. Utilizar para ello una función recursiva. La secuencia comienza: 0, 1, 1, 2, 3, 5, 8, ... 8. Implementar un programa que ordene un array de números enteros mediante el siguiente procedimiento:
a. En primer lugar se busca el elemento menor del array y se coloca al principio. b. A continuación se repite la operación con el resto del array. c. El algoritmo se detiene cuando no quedan elementos que ordenar. Utilizar para ello una función recursiva.