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!
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;
}
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)
}
Entendi, obrigado!
Valeu pela dica, obrigado!
Obrigado pela dica, eu estava a constatar o mesmo erro.
Tentei com a sua sugestão Igor-ks, deu certo.
Saudações,
Não percebi muito bem como implementar o passo 3 e o passo 4!
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 )