[Récursivité] Recherche basique dans un tableau
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 :
Code:
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);
} |
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:
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;
} |
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.
Quand j'appelle ma fonction dans main elle se fait de la façon suivante
Code:
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)); |
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é.
Par avance merci.