Tuesday, March 9, 2010

LEPIV - Unidad 3 - Teoria y Taller.

Recursividad:

La recursividad es una tecnica usada en programación a través de la cual un proceso de define sobre si mismo, en terminos de programación, se repiten un conjunto de sentencias en un método a través de llamadas sucesivas a si mismo, es util cuando tenemos un problema que puede ser subdividido en instancias mas pequeñas de si mismo, hasta llegar a la solucion explicita de las instancias mas simples, conocidas como casos base. En el curso haremos uso de la recursividad, para iterar (Ejecutar un conjunto de sentencias) o para la solucion de series numericas.
Ejemplos:
1) Mostrar por pantalla los numeros del 1 al 10, usando recursividad.
Solucion:
public class Recursiva1() {
public void mostrarNumero(int n) {
if (n > 0 && n <=10) {
System.out.println(n);
mostrarNumero(n + 1);
}
}
}

public class Principal() {
public static void main (String args[]) {
Recursiva1 rec = new Recursiva1();
rec.mostrarNumero(1);
}
}

En este ejemplo, observamos que tenemos dos clases, una con el metodo recursivo, y otra con el metodo main, adicionalmente si bien el metodo recursivo se llama desde adentro a si mismo, este necesita una primera llamada desde afuera para iniciarse, la cual estamos haciendo desde el la clase con el metodo main.

2) Resolver la siguiente serie numerica aplicando recursividad.

Una serie numerica es una funcion definida para un subconjunto de los numero naturales en la cual cada elemento se obtiene a partir de uno o varios elementos previos, y que cuenta con uno a varios casos bases.

Ejemplo:

Sea la serie f(n) = 2 si n = 1, f(n) = f(n - 1) + n si n > 1. Obtenga el valor de f(5).

Observamos que tenemos un caso base f(n) = 2 si n = 1, es decir f(1) = 2. Y tenemos el caso general f(n - 1) + n si n > 1, entonces procedamos a calcular el valor de f(5), pero este se calcula en funcion de f(4), el cual a su vez se calcula a partir de f(3), quien a su vez a de f(2), quien se calcula a partir de f(1) el cual es el caso base, entonces procedamos.

f(1) = 2. Caso base.
f(2) = f(1) + 2 = 2 + 2 = 4. // caso general.
f(3) = f(2) + 3 = 4 + 3 = 7. // caso general.
f(4) = f(3) + 4 = 7 + 4 = 11. // caso general.
f(5) = f(4) + 5 = 11 + 5 = 16. // caso general.

De esta forma obtenemos que f(5) = 16.
Ahora como implementar esto usando recursividad?
Sencillo, un metodo y ya.

public class Recursiva2() {
public int calcularSerie(int n) {
if (n == 1) {
return 2;
} else if (n > 1) {
return n + calcularSerie(n - 1);
} else { // Pasaron un valor negativo por parametro
return -1;
}
}
}

public class Principal() {
public static void main (String args[]) {
Recursiva2 rec = new Recursiva2();
int num = 5;
int valor = rec.calcularSerie(num);
System.out.println("Para f = " + num + " la serie vale " + valor);
}
}

Taller: Para ser entregado el sabado 13 de Marzo, cualquier duda colocar en el blog.

Dada la siguiente serie numerica, obtener f(n) para n un numero aleatorio entre 5 y 15.

f(n) = 2 si n = 1, 3 si n = 2
f(n) = f (n-1) + f (n-2), si n > 2 y par
f(n) = f (n-1) + f (n-2)/n, si n > 2 e impar

No comments:

Post a Comment