La recursividad - Risuk90

Introducción




La recursividad se utiliza en Backtracking, en inteligencia artificial (en lenguaje lisp), en fractales(Figuras como Curva de Hilbert), tambien se usa para minimizar la dificultad de problemas complejos(divide y venceras), ejemplo la suma de los 1ros 10 numeros, etc.

Por ejemplo para calcular el factorial de un numero en java puede hacerse de 2 maneras.
Con o sin recursividad. Tambien sirviría para realizar la sucesion de fibonacci

Recursividad: Cálculo factorial.
Codigo:
public class Main {
static int factorial (int numero) {
    if (numero == 0) return 1;
    else return numero * factorial(numero-1);
}

public static void main(String[] args) {
 System.out.println("Factorial de 5 es: " + factorial(5))
}

}

Sin Recursividad: Cálculo factorial.
import java.io.*;
 
public class Factorial
{
 public static void main(String[ args) throws IOException
 {
 InputStreamReader isr = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader(isr);
 
 System.out.print("Introduce un numero: ");
 int num = Integer.parseInt(br.readLine());
 int i;
 long r = 1;
 for(i = 1; i <= num; i++)
 {
 r = r * i;
 }
 System.out.println("El factorial es: " + r);
 }
}


Se dice que un procesos es recursivo si forma parte de si mismo, o sea que se define en ufnción de sí mismo. Ejemplos típicos de recursión los podemos encontrar frecuentemente en problemas matemáticos, en estructuras de datos y en muchos otros problemas.

La recursión es un proceso extremadamente potente, pero consume muchos recursos, lo que actualmente poco importa pero sin embargo es un razon para analizar detenidamente, para saber cuando y como aplicarla. Aunque un problema por definición sea recursivo, no siempre la mejor manera de solucionarla es con la recursión.

Cuando se pone en marcha un proceso recursivo se necesita cierta cantidad de memoria para almacenar el estado del proceso cada vez que se abandona temporalmente, una solucion parcial debido a que se ejecuta otro proceso que es él mismo. Esas soluciones parciales luego cuando se realize la ultima ejecución se debería recuperar, de ese modo la ultima ejecución reanudaría a la antigua.

Ejemplo el método de Ackerman, que esta definido para valores enteros no negativos m y n.

Sipongamos que lo queremos plantear sin recursión, se exigiría salvar las variables necesarias del proceso en curso, cada vez que el metodo se llame a sí mismo, con el fin de poder reanudarlo cuando finalice el nuevo proceso invocado.

Y la mejor forma de ahcer esto es utilizar una pila, con el fin de almacenar los valores m y n cada vez que se invoque el método para una nueva ejecución y tomar estos valores de la cima de la pila, cuando esta nueva ejecución finalice, con el fin de reanudar la antigua.


Un proceso en el que es realmente eficaz aplicar la recursión es el problema de las torres de Hanoi.


La recursividad - Risuk90
5 Puntos Score: 5/10
Visitas: 658 Favoritos: 2
Ver los usuarios que votaron...
4 Comentarios La recursividad - Risuk90
interesante el juego
Cita lasmlasm: Mostrar
gracias.  
Gracias por compartir
Recordatorio Recursivo.....Hace tiempo que no jugaba hanoi, interesante el Post  
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!