You are on page 1of 3

Ejemplos de recursividad.

Pasar de Decimal a
Binario de forma recursiva
Programa que lea un nmero 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 nmero es 0 1. En ese caso el nmero binario


equivalente es el mismo.

Si no, se hace una llamada recursiva al mtodo, envindole n/2.

Cuando en esas llamadas recursivas se enve un 0 o un 1 se mostrar ese valor y a


continuacin se ejecutar la instruccin System.out.print(n % 2); que imprimir el
resto de la divisin en cada momento de la ejecucicn.

Para entender mejor como se producen la secuencia de llamadas recursivas puedes


ver de forma grfica el clculo del factorial en la imagen de esta pgina.

import java.util.*;

/**
* Mtodo recursivo que dado un nmero 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;
}
}
}

Solucin no recursiva para pasar de decimal a binario


Ms ejemplos de recursividad

Si te ha sido til comprtelo


4 comentarios:
1.

Juan F10 de marzo de 2016, 22:56

Alguien me podra explicar cmo hace el programador para que no salga


000001 si ingreso 32? Not que si invierto estas dos lneas del else: decBin(n
/ 2); System.out.print(n % 2); sale al revs de la respuesta correcta, es
decir, "000001". Qu pasa ah? Por que la inversin causa eso? Entiendo que
lo correcto es 100000, slo quiero saber cmo lo hizo
Responder

2.

llull7311 de abril de 2016, 17:42

EL resultado sale invertido porque primero mandas imprimir y luego llamas a


la funcin. 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 condicin, no se volver a llamar a la funcin


"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 funcin "decBin", el


numero aparecer invertido porque primero imprimir el (n %2) y luego
llamar a la funcin.
Responder
Respuestas
1.

Sikko25 de abril de 2016, 4:09

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.
Responder

3.

Alf051626 de mayo de 2016, 2:58

Y si quiero que convierta de Binario a decimal de forma recursiva como


seria ?

You might also like