Je cours un programme très simple qui simule tour de Hanoi. J'imprime le temps nécessaire pour déplacer les disques n (20 à 30). Je vois un motif étrange. Il faut environ le même laps de temps pour déplacer n (nombre pair) et n + 1 disques. Et pour déplacer n + 2 disque il faut 4 fois de n disques. J'ai mis le programme ci-dessous. Je suppose qu'il y a une certaine optimisation en vm lorsque nous avons plusieurs appels de récursivité. Quelqu'un peut-il donner plus de lumière à ce sujet?comportement étrange lors de l'exécution de la tour de Hanoi
public class Hanoi {
public static void move(int n) {
if(n > 0) {
move(n-1);
move(n-1);
}
}
public static void main(String[] args) {
int N = 28;
move(12);
for(int n=18; n <= N; n++) {
long start = System.currentTimeMillis();
move(n);
long end = System.currentTimeMillis();
System.out.printf("n=%d t=%d i=%d\n",n, (end-start) , 10);
}
}
}
Comme votre code a des récursions de queue, il est probable qu'il sera optimisé. –