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
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 ?
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
et vous avez oublié que ce sujet n'a aucun relation avec le langage C
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part return rechDich...
Essaie de faire comme ça ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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ù.
Partager