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))
