Como converter um número decimal em binário? (com recursividade)
Digamos que você queira saber qual é o equivalente do número 4
em binário.
Para transformar um decimal em binário, é necessário guardar o resto da divisão dele por 2 e ir dividindo o número enquanto ele for maior que 0.
Ficou confuso? Deixa que eu explico melhor:
O resto da divisão de 4 por 2 é 0
, que representa um digito binário. Para descobrir os outros dígitos binários, é necessário continuar realizando divisões por 2.
Exemplificando, o esquema fica assim:
4 % 2 = 0 4 // 2 = 2 (agora, quem será dividido por 2 é o 2)
2 % 2 = 0 2 // 2 = 1 (agora, quem será dividido por 2 é o 1)
1 % 2 = 1 1 // 2 = 0 (agora, quem será dividido por 2 é o 0)
Quando n é <= 0, retorna-se 0
Se juntar todos os dígitos binário, o resultado fica 001
(o último 0 não entra aqui), mas 4 em binário é 100! Mas calma, o algoritmo não está errado, é só a ordem de organização dos dígitos que não está correta.
Recapitulando, temos:
0
( 4 % 2 )
0
( 2 % 2 )
1
( 1 % 2 ) -> último dígito válido
0
( 1 / 2 <= 0 )
A conta é feita a partir do último digito válido obtido, e é feita com o dígito somado de 10 vezes o seu antecessor
O último dígito é o 1, portanto: 1 + 10 * 0
(esse 0 é aquele que é retornado quando a divisão é menor ou igual a 0)
Esse cálculo resulta em: 1
(fique atento à ordem de precedência)
O próximo digito válido é o 0, portanto: 0 + 10 * 1
(esse 1
é resultado do cálculo de cima).
Esse cálculo resulta em: 10
O próximo digito válido é o 0, portanto: 0 + 10 * 10
(esse 10
é resultado do cálculo de cima).
Ao final, as operações resultam em 100
, que é o equivalente binário do 4!
A representação desse esquema em forma de código pode ser representada da seguinte forma:
def decimal_to_binary(n):
if n <= 0:
return 0
else:
return n % 2 + 10 * (decimal_to_binary(n // 2))