Codigo java com função recursiva que permite inverter um número inteiro

7 respostas
Alberto_Rocha_Pinal1

Boa noite!
Alguém pode me ajudar?
Necessito de um código em Java que inverta um número inteiro com uma função recursiva.
Agradeço!

7 Respostas

staroski

Mas você quer inverter o número ou escrevê-lo ao contrário?
Pra inverter é só fazer:

double inverso = 1 / (double) numero;

Agora se quer imprimir ao contrário, utilizando recursividade, seria algo assim:

funcaoRecursiva(digitos) {
    digito d = remove digito mais significativo de digitos;
    se possui mais digitos {
        funcaoRecursiva( digitos );
    }
    imprime d;
}
peczenyj

vc quer algo como

123 se torna 321 ?

aqui cabe conhecimento de matematica. o primeiro é a partir de 123 vc extrair o ultimo numero, o 3? e aqui entra o resto de divisão ( modulo, ou % )

em artimetica de inteiros a gente obtem estes resultados

123 % 10 = 3
123 / 10 = 12.

agora, de 12, como vc obtem o 2? mesma coisa.

int numero = 123;
int digito = numero % 10;
int resto = numero / 10;

if ( resto >= 10 ) { ainda tem coisa pela frente }

vc tem 3 e 2, como vc transforma isso em 32? isso é o mesmo que 3 * 10 + 2 certo?

perceba que existe um padrao ai. um padrão onde vc tem 2 parametros: a sua fonte e o seu destino.

int inverter(int fonte) { return inverter( fonte / 10, fonte % 10 ); }
int inverter(int fonte, int destino ) { 
  1. se fonte for 0, retorna o destino
  2. pega o digito e o resto da fonte
  3. multiplica o destino por 10 e soma com o digito
  4. chama a funcao de novo porem chame como funcao(resto, destino)
}
Alberto_Rocha_Pinal1

Entendi, obrigado!

Alberto_Rocha_Pinal1

Valeu pela dica, obrigado!

A

Obrigado pela dica, eu estava a constatar o mesmo erro.
Tentei com a sua sugestão Igor-ks, deu certo.

C

Saudações,

Não percebi muito bem como implementar o passo 3 e o passo 4!

peczenyj

vamos la, vc quer inverter 32 em 23, certo?

inverter( 321 ) é equivalente a inverter( 321/ 10, 321 % 10 )

321 / 10 é 32 ( divisão inteira )
321 % 10 é 1 ( resto da divisão inteira )

inverter( 321 ) = inverter( 32, 1 )

agora vamos de:

int inverter(int fonte, int destino ) { 
  1. se fonte for 0, retorna o destino
  2. pega o digito e o resto da fonte
  3. multiplica o destino por 10 e soma com o digito
  4. chama a funcao de novo porem chame como funcao(resto, destino)
}

na primeira vez temos

fonte = 32;
destino = 1;

passo 1: fonte é zero? não, então segue

passo 2: fazemos sobra = fonte / 10 e digito = fonte % 10 ( sobra = 3, digito 2 )

passo 3: fazemos: multiplica destino por 10 e soma digito: destino = 10 * destino + 2, ou destino = 12 - originalmente eu chamei sobra de resto porem isso pode confundir com resto de divisão, modulo, estou dando um nome mais apropriado pois é o que sobrou do numero.

passo 4: chamamos novamente inverter( sobra, destino ) ou inverter( 3, 12 )

o que vai acontecer se vc aplicar os 4 passos de novo?

fonte = 3;
destino = 12;

passo 1: fonte é zero? não, então segue

passo 2: fazemos sobra = fonte / 10 e digito = fonte % 10 ( sobra = 0, digito 3 )

passo 3: fazemos: multiplica destino por 10 e soma digito: destino = 10 * destino + 3, ou destino = 123

passo 4: chamamos novamente inverter( sobra, destino ) ou inverter( 0, 123 )

e agora? chamamos de novo.

fonte = 0;
destino = 123;

passo 1: fonte é zero? SIM. então retorna o destino ( 123 )

Criado 14 de novembro de 2016
Ultima resposta 3 de set. de 2018
Respostas 7
Participantes 5