Tutoriales de Java

Java INICIO Introducción a Java Introducción a Java Sintaxis Java Comentarios Java Variables Java Tipos de datos Java Conversión de tipos de Java Operadores Java Cadenas Java Matemáticas Java Booleanos de Java Java si... si no Conmutador de Java Ciclo while de Java Java para bucle Java Pausa/Continuar Matrices de Java

Métodos de Java

Métodos de Java Parámetros del método Java Sobrecarga del método Java Alcance de Java Recursión de Java

Clases Java

programación orientada a objetos de Java Clases/Objetos Java Atributos de clase de Java Métodos de clase Java Constructores Java Modificadores de Java Encapsulación de Java Paquetes Java/API Herencia de Java Polimorfismo de Java Clases internas de Java Abstracción de Java Interfaz Java Enumeraciones de Java Entrada de usuario de Java Fecha Java Java ArrayList Java LinkedList Mapa hash de Java HashSet de Java Iterador de Java Clases contenedoras de Java Excepciones de Java Java expresión regular Subprocesos de Java Java lambda

Manejo de archivos Java

Archivos Java Java crear/escribir archivos Archivos de lectura de Java Eliminar archivos de Java

Java Cómo

Añadir dos números

Referencia Java

Palabras clave de Java Métodos de cadena de Java Métodos matemáticos de Java

Ejemplos de Java

Ejemplos de Java Compilador Java Ejercicios Java Cuestionario Java Certificado Java


Recursión de Java


Recursión de Java

La recursividad es la técnica de hacer que una función se llame a sí misma. Esta técnica proporciona una forma de dividir problemas complicados en problemas simples que son más fáciles de resolver.

La recursión puede ser un poco difícil de entender. La mejor manera de averiguar cómo funciona es experimentar con él.


Ejemplo de recursividad

Sumar dos números juntos es fácil de hacer, pero sumar un rango de números es más complicado. En el siguiente ejemplo, la recursividad se usa para sumar un rango de números al dividirlo en la simple tarea de sumar dos números:

Ejemplo

Usa la recursividad para sumar todos los números hasta 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(10);
    System.out.println(result);
  }
  public static int sum(int k) {
    if (k > 0) {
      return k + sum(k - 1);
    } else {
      return 0;
    }
  }
}

Ejemplo explicado

Cuando sum()se llama a la función, agrega un parámetro ka la suma de todos los números menores que ky devuelve el resultado. Cuando k se convierte en 0, la función simplemente devuelve 0. Cuando se ejecuta, el programa sigue estos pasos:

10 + suma(9)
10 + ( 9 + suma(8) )
10 + ( 9 + ( 8 + suma(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + suma(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

Dado que la función no se llama a sí misma cuando kes 0, el programa se detiene allí y devuelve el resultado.


Condición de parada

Así como los bucles pueden encontrarse con el problema de los bucles infinitos, las funciones recursivas pueden encontrarse con el problema de la recursividad infinita. La recursión infinita es cuando la función nunca deja de llamarse a sí misma. Cada función recursiva debe tener una condición de detención, que es la condición en la que la función deja de llamarse a sí misma. En el ejemplo anterior, la condición de detención es cuando el parámetro kse convierte en 0.

Es útil ver una variedad de ejemplos diferentes para comprender mejor el concepto. En este ejemplo, la función agrega un rango de números entre un inicio y un final. La condición de detención para esta función recursiva es cuando end no es mayor que start :

Ejemplo

Usa la recursividad para sumar todos los números entre 5 y 10.

public class Main {
  public static void main(String[] args) {
    int result = sum(5, 10);
    System.out.println(result);
  }
  public static int sum(int start, int end) {
    if (end > start) {
      return end + sum(start, end - 1);
    } else {
      return end;
    }
  }
}