La recursividad es un proceso por el cual una función se llama a sí misma repetidamente hasta que cae bajo la condición base y se logra nuestro motivo.
Para resolver cualquier problema usando la recursividad, simplemente debemos seguir los siguientes pasos:
- Asuma el problema más pequeño del problema que es similar al problema más grande/original.
- Decida la respuesta a la entrada válida más pequeña o la entrada no válida más pequeña que actuaría como nuestra condición base.
- Acérquese a la solución y vincule la respuesta al problema más pequeño dado por la función recursiva para encontrar la respuesta al problema más grande/original usándolo.
Ejemplo:
Input: 14689 Output: 98641 Input: 7654321 Output: 1234567
Enfoque 1:
- En este enfoque, podemos simplemente imprimir el dígito de la unidad de un número.
- Y luego llame a la función recursiva para el número después de eliminar este dígito de unidad (número/10)
- Y este proceso continúa hasta que el número se reduce a un número de un solo dígito.
Ejemplo:
num = 82695 reverse(82695) | |__print(5) reverse(8269) | |__print(9) reverse(826) | |__print(6) reverse(82) | |__print(2) reverse(8) | |__print(8) return
Java
// Java program to reverse // an integer recursively class GFG { // Recursive function to print // the number in reversed form public static void Reverse(int num) { // base condition to end recursive calls if (num < 10) { System.out.println(num); return; } else { // print the unit digit of the given number System.out.print(num % 10); // calling function for remaining number other // than unit digit Reverse(num / 10); } } // driver code public static void main(String args[]) { // number to be reversed int num = 98765; System.out.print("Reversed Number: "); // calling recursive function // to print the number in // reversed form Reverse(num); } }
Producción
Reversed Number: 56789
Enfoque 2:
- En este enfoque, podemos simplemente mantener una variable en la que podemos almacenar el número invertido hasta ahora.
- Podemos hacer esto extrayendo un dígito unitario del número y luego agregando este entero extraído al número invertido
- Pero el factor clave aquí es que tenemos que multiplicar el número invertido por 10 antes de sumar este número extraído al número invertido.
Ejemplo:
num = 48291 ans = 0 -> variable to store reversed number How this works: reverse(num) | |__ temp = num % 10 -> extracting unit digit from number ans = ans*10 + temp -> adding temp at unit position in reversed number reverse(num/10) -> calling function for remaining number Implementation: reverse(48291) | |__ temp=1 ans= 0*10 + 1 --> ans=1 reverse(4829) | |__ temp=9 ans= 1*10 + 9 --> ans=19 reverse(482) | |__ temp= 2 ans= 19*10 +2 --> ans=192 reverse(48) | |__ temp=8 ans=192*10 + 8 --> ans=1928 reverse(4) | |__ temp=4 ans=1928*10 +4 --> ans=19284 reverse(0) | |__ return ans
Java
// Java program to reverse an integer recursively class GFG { // Variable to store reversed // number after every // recursive call static int ans = 0; static int Reverse(int var) { // base condition to end the // recursive calling of function if (var == 0) { // We have reversed the // complete number and // stored in ans variable return ans; } if (var > 0) { // temp variable to store the digit at unit // place in the number int temp = var % 10; // Add this temp variable in the ans variable // which stores the number reversed till now ans = ans * 10 + temp; // recursive calling of function to reverse the // remaining number Reverse(var / 10); } // returning final answer when the number is // reversed completely return ans; } public static void main(String[] args) { // Number to be reversed int var = 98765; // Variable to store reversed number returned by // reverse function int rev; // Calling reverse function and storing the return // value in rev variable rev = Reverse(var); // Printing the Reversed Number System.out.println("Reversed number: " + rev); } }
Producción
Reversed number: 56789
Nota: Java no genera una excepción cuando se produce un desbordamiento, por lo que podría producirse un problema de desbordamiento si el número invertido es mayor que Integer.MAX_VALUE (2147483647) en el método 2, pero no habrá tal problema en el método 1.
Publicación traducida automáticamente
Artículo escrito por prateekc231 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA