Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método RECURSIVO para apresentar a representação de um número inteiro em uma base b

Escreva um método recursivo base() que aceite um inteiro não negativo n e um inteiro positivo 1 < b < 10 e apresente a representação base b do inteiro n.

>>> base(0, 2)
0
>>> base(1, 2)
1
>>> base(10, 2)
1010
>>> base(10, 3) 1 0 1

Eu apenas consegui fazer uma solução não-recursiva:

def base(n,b):
    restos = []
    quo = b+1
    if 1 < b <10:
        if n >=b:
            while quo >= b:
                resto = n % b
                quo = n // b
                n = quo
                restos.append(resto)
            return quo, restos[::-1]

print(base(72,2))

Como fazer a solução recursiva?

1 resposta
solução!

Olá Edson, tudo bem? Para fazer um programa recursivo, precisamos sempre ter uma condição de parada e diminuir o problema em etapas menores, ok? Em nosso caso a condição de parada ocorrerá quando a base for maior que o valor do número, e, iremos diminuir o problema passando sempre a parte inteira da divisão do número pela base recursivamente. Dessa forma podemos ter o nosso código da seguinte maneira:

def converter_base( numero, base ):
    if numero < base: return str(numero)
    return converter_base( numero // base, base) + str( numero % base)

Vou simular a execução de 1 exemplo para ver se ficou claro para você, onde "N" é o número e "B" a base:

converter_base(10, 2)
N < B  ? False  
N  // B = 5     e N % B = 0
N < B ? False
N // B = 2  e N % B = 1
N < B ? False
N // B = 1 e N % B = 0
N < B ? True => Irá retornar o valor 1, correspondente ao N

Ao desempilhar irá concatenar os valores "1" + "0", depois "10" + "1", e, por fim, "101" + "0", que é a resposta final do problema "1010". Lembrando que em meu código eu não fiz a limitação da base ( 1 < b < 10 ), entretanto, com apenas um if é possível fazer isso :)

Abraços e Bons Estudos!