Recursividad
La recursión en Java es una técnica de programación en la cual un método llama a sí mismo para resolver un problema. Es una forma de resolver problemas complejos mediante la división del problema en subproblemas más pequeños y similares, hasta que se alcance un caso base.
Ejemplo 1: Calcular el factorial de un número. El factorial de un número n es el producto de n por todos los números enteros positivos menores a él. El caso base es cuando n es igual a 1, en cuyo caso se devuelve 1.
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
Ejemplo 2: Calcular la serie de fibonacci: La serie de Fibonacci es una secuencia en la cual cada número es la suma de los dos números anteriores. La serie comienza con 0 y 1 y continúa con 1, 2, 3, 5, 8, etc. El caso base es cuando n es igual a 0 o 1, en cuyo caso se devuelve n.
public int fibonacci(int n) {
if (n == 0 || n == 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
Es importante tener en cuenta que el uso excesivo de recursión puede causar un desbordamiento de pila y hacer que su aplicación sea inestable. Es importante siempre tener un caso base y una forma de salir de la recursión.
No siempre la recursividad se utiliza con series matemáticas. Aquí te dejo un ejemplo de un método en Java que busca recursivamente archivos con un nombre dado en una carpeta dada:
import java.io.File;
public class FileSearch {
public static void search(String directoryName, String fileName) {
File directory = new File(directoryName);
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile() && file.getName().equals(fileName)) {
System.out.println("Archivo encontrado en: " + file.getAbsolutePath());
} else if (file.isDirectory()) {
search(file.getAbsolutePath(), fileName);
}
}
}
public static void main(String[] args) {
String directory = "/path/to/directory";
String fileName = "example.txt";
search(directory, fileName);
}
}
El método search() toma dos parámetros: el primer parámetro es el nombre de la carpeta en la que se va a buscar, y el segundo parámetro es el nombre del archivo que se está buscando. Dentro del método, se crea un objeto File para la carpeta especificada y se obtiene una lista de todos los archivos y carpetas dentro de esa carpeta. A continuación, se itera a través de cada archivo y carpeta en la lista, y se comprueba si es un archivo y si tiene el nombre especificado. Si es así, se imprime la ruta absoluta del archivo. Si es una carpeta, se llama recursivamente al método search() con la ruta de la carpeta como el primer parámetro.
Ten en cuenta que este ejemplo imprime la ruta del archivo encontrado, si quieres hacer algo más con él, puedes hacerlo en esa linea.