|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
[JAVA] Algoritmo ricorsivo inversione cifre
Salve a tutti sono alle prese con questo semplice algoritmo ma alquanto fastidioso...il mio obiettivo è invertire un numero es.: input 12345 -output 54321... sono riuscito a fare ciò solo trasformando le cifre in stringhe per poi concatenarle...vi posto la mia soluzione:
Codice:
public static int inversioneR(int x)
{
String numero = "";
if(x<10) return x ;
else
{
int inverso = x % 10;
numero += inverso;
int newX = x / 10;
return Integer.parseInt(numero + inversioneR(newX));
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Beh ma credo non cambierebbe nulla trasformandole in lettere
Alla fine ti troveresti un array di char invece che una stringa (che è per l'appunto un array di char). Ho forse capito male quello che vuoi fare?
__________________
iMac 27" 5K |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Puoi aiutarti pensando che quando concateni ad un numero una cifra quello che ottieni è questo:
Codice:
Numero.Cifra -> Numero*10+Cifra
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non riesci a trovarlo perché pensi a fare la ricorsione solo in fondo...se la fai all'inizio cosa succede ?
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Fatti un disegnino ad alberello di come lavora l'algoritmo!
Si comincia dal caso base (non sempre ovviamente), cioè quando l'algoritmo deve fermarsi! Quando si ferma comincia dall'alto della pila (stack) a far proseguire l'algoritmo che ha richiamato l'ultima volta la ricorsione! In questo modo l'elemento letto all'ultimo, sarà il primo ad essere elaborato! ti faccio un esempio Codice:
public static void leggiArr(int a[]){
leggiArr(a, 0);
}
public static void leggiArr(int a[], int i){
if(i == a.length)return;
System.out.print(a[i]+" ");
leggiArr(a, i + 1);
}
Ciao |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
grazie a tutti per esservi interessati al mio problema...."ho trovato" la soluzione....
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Rendici partecipi
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
certo con molto piacere....
allora essenzialmente "l'unica" soluzione è questa: Passo base: portarsi dietro come parametro esplicito della chiamata ricorsiva una variabile che potesse sommare l'ultima cifra del numero moltiplicata per 10 alla penultima e così via fino alla prima. quindi il codice sarebbe questo Codice:
public static int inversioneR(int numero, int inverso)
{
int resto = numero % 10;
if(numero > 10)
{
int newNumero = numero / 10;
inverso = (inverso + resto) * 10;
return inversioneR(newNumero,inverso);
}
else
return inverso + resto;
}
inversioneR( numeroDaInvertire , 0 ) Vi ringrazio ancora per i vostri suggerimenti |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Bene.
Però si sarebbe potuto fare anche con un solo parametro sfruttando alcun proprietà matematiche. PS: sia chiaro, non è più veloce di come l'hai fatto te |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2008
Città: Imperia
Messaggi: 1171
|
era quello che volevo ottenere come soluzione ma sinceramente non sono riuscito a trovare la sequenza di calcoli matematici esatta....
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Pensa a logaritmo in base 10 ed elevazione a potenza di 10
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:27.




















