Bonjour.
J'ai beaucoup de mal avec la récursivité, et notamment la logique qu'il y a derrière. Je sais qu'en principe à chaque fois qu'on a une boucle on peut la remplacer par un appel à la fonction. Donc je me suis essayé à un exo simple, et très classique, recherche du maximum dans un tableau. Ici l'exemple classique d'une itération :
Rien d'exceptionnelle sous le soleil. Par contre là ou ça se corse sérieusement c'est la version récursive que j'ai fait :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 static void rechercheMax(int unTab []) { int max = unTab[0]; for (int j = 0; j < unTab.length; j++) { if (unTab[j] > max) { max = unTab[j]; } } System.out.println("Le max est " + max); }
Là où j'hallucine et c'est vraiment un truc de "fou" c'est qu'une fois arrivé à la fin de la boucle, le compteur repart dans le sens inverse. Honnêtement je ne comprends pas, et même pas du tout.
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 static int rechercheMaxRec(int[] unTab, int j, int max) { if (j < unTab.length-1) { if (unTab[j] > max) { max = unTab[j]; j++; rechercheMaxRec(unTab, j, max); }else { j++; rechercheMaxRec(unTab, j, max); } } return max; }
Quand j'appelle ma fonction dans main elle se fait de la façon suivante
si parmi vous pouvez m'expliquer deux choses, pourquoi que ça ne donne pas le bon résultat, et pourquoi que ce foutu compteur repart dans l'autre sens, c'est un phénomène particulièrement angoissant, parce que ça montre que j'ai rien compris à la récursivité.
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 .....//il y a bien sur du code avant, int unTab[] = { 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 103, 10, 5, 16, 8, 4, 2, 1 }; System.out.println("Le max dans la recursive est " + rechercheMaxRec(unTab, 0,0));
Par avance merci.
Partager