fc90
14-11-2011, 16:47
Sto esercitandomi sulla ricorsione multipla in java. Ho scritto un semplice codice basato su ricorsione binaria. A differenza di alcuni codici trovati qua e la sulla rete che sfruttano ricorsioni almeno ternarie.
esempio: (rosetta code)
public void move(int n, int from, int to, int via) {
if (n == 1) {
System.out.println("Move disk from pole " + from + " to pole " + to);
} else {
move(n - 1, from, via, to);
move(1, from, to, via);
move(n - 1, via, to, from);
}
}
ecco il mio:
static void solve(int n, int from, int to, int via) {
if(n==0) return;
solve(n-1, from, via, to);
System.out.println(n+" "+from+" "+to);
solve(n-1, via, to, from);
}
Cosa ne pensate di questa soluzione?
Un'ulteriore domanda. Come potrei modificare il codice affinche le mosse possibili siano solo spostamenti tra due pali adiacenti e sia illegale spostare un disco dal pole 1 al pole 3 o viceversa?
esempio: (rosetta code)
public void move(int n, int from, int to, int via) {
if (n == 1) {
System.out.println("Move disk from pole " + from + " to pole " + to);
} else {
move(n - 1, from, via, to);
move(1, from, to, via);
move(n - 1, via, to, from);
}
}
ecco il mio:
static void solve(int n, int from, int to, int via) {
if(n==0) return;
solve(n-1, from, via, to);
System.out.println(n+" "+from+" "+to);
solve(n-1, via, to, from);
}
Cosa ne pensate di questa soluzione?
Un'ulteriore domanda. Come potrei modificare il codice affinche le mosse possibili siano solo spostamenti tra due pali adiacenti e sia illegale spostare un disco dal pole 1 al pole 3 o viceversa?