slt
tout est dans le titre , j'ai besoin d'une fonction récursive qui fait une recherche dichotomique sur un tableau ,bien sur qui est trier auparavant.??
merci
Version imprimable
slt
tout est dans le titre , j'ai besoin d'une fonction récursive qui fait une recherche dichotomique sur un tableau ,bien sur qui est trier auparavant.??
merci
recherche dichotomique d'accord... Mais pourquoi récursive ?
et vous avez oublié que ce sujet n'a aucun relation avec le langage C 8O
enfin c'est de l'algorithmique ??
http://www.developpez.net/forums/forumdisplay.php?f=60
désolé.voici le code j sais pas s'il est correct ou non!!
Code:
1
2
3
4
5
6
7
8
9
10 int rechDich(int x, int t[], int debut, int fin) { int milieu = (debut+fin)/2; if(debut > fin) return (-1); if(x == t[milieu]) return milieu; if (x < t[milieu]) return rechDich(x, t, debut, milieu-1); return rechDich(x, t, milieu+1, fin); }
Bah c'est-à-dire qu'on ne voit pas vraiment de problème dans ce code...
C'est quoi le problème que tu as là-dedans ?
le probléme est simple a dire: le code ne marche pas j sais pas pourquois!!!
Ouais mais bon, un code a plusieurs façons de ne pas marcher...
Fais voir le code de la fonction appelante stp. Le problème peut sans doute venir de là...
és que les trois "if" consécutif ne pose pas de problémes ,surtout qu'ils ne sont pas séparé par des accolades et aussi ta pas d "else",c s que je veux savoir!!
L'absence de else ne pose pas de problème ici.
Le truc c'est qu'à chaque if() il y a un return, donc, si un if est vrai, alors le reste n'est pas exécuté, si un if n'est pas exécuté on fait la suite du code.
ben essaie avec les accolades, au moins tu es sûr de ce que tu fais
sinon, je ne vois pas le pb avec les return, il faut bien que la récursion s'arrête à un moment.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 int rechDich(int x, int t[], int debut, int fin) { int milieu = (debut+fin)/2; if(debut > fin) return (-1); if(x == t[milieu]) return milieu; if (x < t[milieu]) { return rechDich(x, t, debut, milieu-1); } else { return rechDich(x, t, milieu+1, fin); } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12 int rechDich(int x, int t[], int debut, int fin) { int milieu = (debut+fin)/2; if(debut > fin) return (-1); if(x == t[milieu]) return milieu; if (x < t[milieu]) return rechDich(x, t, debut, milieu-1); return rechDich(x, t, milieu+1, fin); }
ça ne veut rien dire de mettre
la récursivité s'utilise seulement avec l'appel de la fonction.Code:return rechDich...
Essaie de faire comme ça ;
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int rechDich(int x, int t[N], int debut, int fin) { int milieu = (debut+fin)/2; if(x == t[milieu]) return VRAI; else { if (x < t[milieu]){ rechDich(x, t, debut, milieu-1);} else{ rechDich(x, t, milieu+1, fin);} } return FAUX; }
Et comment on fait pour connaitre la coordonnée de x ?
Ton code permet de savoir si x est dans le tableau mais pas de savoir où.