Ejemplos de recursividad. Pasar de Decimal a Binario de forma recursiva

Programa que lea un número entero entero mayor o igual que cero en base decimal y muestre su equivalente en binario de forma recursiva

El caso base se obtiene cuando el número es 0 ó 1. En ese caso el número binario equivalente es el mismo.

Si no, se hace una llamada recursiva al método, enviándole n/2.

Cuando en esas llamadas recursivas se envíe un 0 o un 1 se mostrará ese valor y  a continuación se ejecutará la instrucción System.out.print(n % 2); que imprimirá el resto de la división en cada momento de la ejecucicón.

Para entender mejor como se producen la secuencia de llamadas recursivas puedes ver de forma gráfica el cálculo del factorial en la imagen de esta página.

import java.util.*;

/**
  * Método recursivo que dado un número entero en base decimal
 * muestre su equivalente en binario
 */
public class Recursividad {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        do {
            System.out.print("Introduzca numero >0: ");
            n = sc.nextInt();
        } while (n < 0);
        System.out.println();
        System.out.print("Binario: ");
        decBin(n);
        System.out.println();
    }

    public static void decBin(int n) {
        if (n < 2) {
            System.out.print(n);
            return;
        } else {
            decBin(n / 2);
            System.out.print(n % 2);
            return;
        }
    }
}

Solución no recursiva para pasar de decimal a binario
Más ejemplos de recursividad

4 comentarios:

  1. Alguien me podría explicar cómo hace el programador para que no salga 000001 si ingreso 32? Noté que si invierto estas dos líneas del else: decBin(n / 2); System.out.print(n % 2); sale al revés de la respuesta correcta, es decir, "000001". Qué pasa ahí? Por que la inversión causa eso? Entiendo que lo correcto es 100000, sólo quiero saber cómo lo hizo

    ResponderEliminar
  2. EL resultado sale invertido porque primero mandas imprimir y luego llamas a la función. Las funciones recursivas son funciones que se llaman así mismas una y otra vez. La idea del algoritmo es llamarla varias veces hasta que se cumpla que "n" es menor a 2:

    if (n < 2) {
    System.out.print(n);
    return;
    }

    Una vez se cumpla esta condición, no se volverá a llamar a la función "decBin" y se ejecutaran todos los "System.out.print(n % 2)".(De menor a mayor)

    Si cambias el orden del print y el de la llamada a la función "decBin", el numero aparecerá invertido porque primero imprimirá el (n %2) y luego llamará a la función.

    ResponderEliminar
    Respuestas
    1. Muy interesante, entonces la clave esta en la manera en la que imprime todos los System.out.print, si es de "menor a mayor" se entiende el porque la respuesta se invierte, lo cual en este caso ayuda.

      Eliminar
  3. Y si quiero que convierta de Binario a decimal de forma recursiva como seria ?

    ResponderEliminar