Recursión en Java

Recursión en Java
La recursión en Java es el llamado de un método, por el método, desde el método. Esta acción se repite hasta que se cumple una condición. El método debe ser un método en una clase, que no sea uno en la clase principal. La clase principal es la clase que tiene el método Main (). El nombre del archivo Java es el de la clase principal. Todavía se puede hacer recursivo un método estático en la clase principal, pero eso no se abordará en este artículo. Este artículo explica la recursión en Java, con tres buenos ejemplos.

Contando enteros de cero

Considere un archivo Java con dos clases: una clase privada de la siguiente manera:

Clase Aclass
void mthd (int no)
Sistema.afuera.imprimir (no); Sistema.afuera.imprimir(");
no = no + 1;
si no < 5)
mthd (no);

El método para llamar a sí mismo es, mthd (). Tiene el parámetro "int no". El método está en la clase, aclasa. Este método cuenta de 0 a 4. La primera línea en el método tiene dos declaraciones. El primero imprime el parámetro, no. El segundo imprime un espacio a la derecha de este parámetro impreso. La siguiente línea agrega 1 a No. La línea que sigue es una declaración IF-compuesta. Tiene la condición que debe cumplirse. La condición a cumplir es cuando no alcanza 5. Si no se ha alcanzado 5, "MTHD (no)"; " se llama a sí mismo con no que se haya agregado 1.

La clase principal para este método puede ser,

clase pública THECLASS
public static void main (string [] args)
int num = 0;
Aclass obj = new Aclass ();
obj.mthd (num);
Sistema.afuera.println ();

La primera declaración en el método main () declara el entero, num asignando cero a él. Para que se llame a un método, un objeto debe ser instanciado desde su clase. La siguiente declaración en el método main () instancia un objeto, obj de aclass. La declaración después de utilizar este objeto para llamar al método, mthd (), transmitiendo el argumento, num, que es 0. Este es el comienzo del recuento. La última declaración en el método main () imprime una nueva línea, después de que se haya impreso el resultado. La salida es:

0 1 2 3 4

El método recursivo, mthd (), se llama la primera vez desde el método main (). Después de eso sigue llamándose a sí mismo, hasta que se cumpla una condición.

Este tipo de conteo se puede hacer para cualquier rango. Para lograrlo para cualquier rango, el número de inicio del rango debe asignarse a NUM. En lugar de 5 para la condición if en el método, el número justo después del rango debe ser escrito.

Agregar una gama de números dados no continuos

Considere los números:

10, 20, 30, 40, 50, 60

La suma de los primeros 4 números es 100. Es decir: 10 + 20 = 30; 30 + 30 = 60; y 60 + 40 = 100. Un método recursivo puede agregar estos números a una suma creciente hasta que la suma sea menor o igual a 100. Para agregar los primeros cinco números, el método recursivo puede ser agregar los números a una suma creciente hasta que la suma sea menor o igual a 150.

La estrategia es tener todos estos números en una matriz en el método main (). Luego, pase la matriz como argumento al método recursivo. Si se requiere la adición de los primeros cuatro números, entonces cuando la suma alcanza los 100, el método recursivo debe dejar de llamarse a sí mismo. Si se requiere la adición de los primeros cinco números, entonces cuando la suma alcanza 150, el método recursivo debe dejar de llamarse a sí mismo. Si se requiere la adición de los primeros seis números, cuando la suma alcanza 210, el método recursivo debe dejar de llamarse a sí mismo.

La clase para este método recursivo puede ser:

Clase Aclass
int sum = 0, i = 0;
void mthd (int [] arry)
suma = suma + arry [i];
i = i + 1;
if (suma < 100)
mthd (arry);

Esto es para agregar los primeros cuatro números. La clase tiene dos campos, que son suma y yo. Estoy para iterando a través de la matriz, comenzando desde el índice 0. La primera declaración en el método recursivo, mthd (), agrega el siguiente número, a la suma, que es inicialmente cero. La siguiente declaración aumenta I por 1, para el siguiente índice de matriz de la siguiente llamada. La declaración posterior es el compuesto if-statement. La condición aquí es que la suma no debe estar por encima de los 100. Entonces, para cada llamada que la suma no es de hasta 100 (o superior), el método se llama nuevamente, pasando la misma matriz. En esta situación, la condición está al final de la implementación del método.

La clase Main () para esto puede ser:

clase pública THECLASS
public static void main (string [] args)
int [] arr = new int [] 10, 20, 30, 40, 50, 60;
Aclass obj = new Aclass ();
obj.mthd (arr);
Sistema.afuera.println (obj.suma);

La primera declaración en el método main () instancia la matriz, con sus elementos. La segunda declaración instancia el objeto para aclass. La declaración posterior, llama al método recursivo, pasando la matriz como argumento. Esta es la primera llamada del método recursivo. Después de eso, el método se llamará a sí mismo hasta que se alcance la suma requerida. La última declaración imprime la suma final. La salida para este caso es de 100.

Factorial

El factorial de 0, escrito como 0!, es 1. Los factoriales de 5, 4, 3, 2, 1 son los siguientes:

Factorial de 5 = 5 x 4 x 3 x 2 x 1 x 0! = 120
Factorial de 4 = 4 x 3 x 2 x 1 x 0! = 24
Factorial de 3 = 3 x 2 x 1 x 0! = 6
Factorial de 2 = 2 x 1 x 0! = 2
Factorial de 1 = 1 x 0! = 1

Se puede escribir un programa para que cuando se envíe un número a un método recursivo, el método recursivo finalmente devolverá el factor resultante. Tenga en cuenta que el factorial se puede calcular hasta 1, en lugar de 0, y el resultado seguirá siendo el mismo.

La clase para el método recursivo puede ser:

Clase Aclass
int mthd (int no)
if (no == 1)
regresar 1;
demás
return (no * mthd (no-1));

Todo el cuerpo del método es un compuesto if-estatement. Si el número cuyo factor se necesita, es 1, lo que se devolverá será 1, ya que el factorial de 1 es 1. Si el número es más grande que 1, entonces toda la multiplicación tendrá que hacerse, comenzando desde el número en sí, bajando por 1 unidad.

El resultado se obtiene cuando se ha realizado toda la multiplicación. La expresión de retorno aquí es una llamada de método. Su argumento es el producto del número y el método recursivo.

Suponga que el número cuyo factor se necesita, es 5, entonces el argumento de la primera llamada de regreso será:

5 x MTHD (4)

Esta expresión se reservará en la memoria, y la próxima llamada será

5 x 4 x MTHD (3)

Esta expresión se reservará en la memoria, y la próxima llamada será

5 x 4 x 3 x MTHD (2)

Esta expresión se reservará en la memoria, y la próxima llamada será

5 x 4 x 3 x 2 x MTHD (1)

Ahora, MTHD (1) Devuelve 1, debido a la declaración if-Part, "if (no == 1) return 1;", dando como resultado,

5 x 4 x 3 x 2 x 1 = 120

Para el valor de retorno final.

La clase principal para esto puede ser:

clase pública THECLASS
public static void main (string [] args)
Aclass obj = new Aclass ();
int ret = obj.MTHD (5);
Sistema.afuera.println (ret);

Con un argumento de 5 para la primera llamada, en el método main (), el valor final devuelto es 120.

Conclusión

La recursión en Java es el llamado de un método, por el método, desde el método. Esta acción se repite hasta que se cumple una condición.