IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Dichotomie / récursivité


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Dichotomie / récursivité
    Bonjour,

    J'ai ajouté une réponse sur un poste, mais comme ce dernier a été résolu, je ne sais pas si quelqu'un va répondre, donc, je crée un nouveau poste.

    Voici le lien du post que j'ai précité : http://www.developpez.net/forums/d70...e/#post7547730

    Voila, dans ce poste sur la dichotomie récursive, je me demandais ou il fallait ajouter "return -1;" au cas ou la valeur n'existe pas dans le tableau ?

    Je compte sur votre aide.

    Merci d'avance,

    TC

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    RE:
    Ca devrait donner quelque chose comme ca, mais ca me fait un stackoverflow :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    public class RecursifDichotomique 
    {
    	public static void main(String[] args) 
    	{
    		RecursifDichotomique rd = new RecursifDichotomique();
    		int[] tableau = {2,4,5,12,14,15,17,23,52,65,76,86,89,91,95,102,103};
     
    		System.out.println(rd.recursifDichotomique(0, tableau.length, tableau, 3));
    	}
     
    	public int recursifDichotomique(int debut, int fin, int[]tableau, int cle)
    	{
    		//clause de finitude
    		if(debut > fin)
    		{
    			return -1;
    		}
    		if(tableau[(debut+fin)/2] == cle)
    		{
    			return (debut+fin)/2;
    		}
    		if(cle < tableau[(debut+fin)/2])
    		{
    			return recursifDichotomique(debut, ((debut+fin)/2), tableau, cle);
    		}
    		else
    		{
    			return recursifDichotomique(((debut+fin)/2), fin, tableau, cle);
    		}
    	}
    }

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1er problème : pas de confition de fin sur debut==fin
    2ème problème : l'indice mil (le milieu de [0..n[ est traité dans le test
    tableau[mil] == cle, donc pas besoin de le retraiter récursivement (en particulier parce qu'on sait déjà qu'il n'est pas égal)



    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
    19
    20
    21
    22
    23
    24
    25
    26
    public int recursifDichotomique(int debut, int fin, int[] tableau, int cle) {
    		  
    		if ( debut==fin ) {
    			if (tableau[debut] == cle) {
    				return debut;
    			}
    			else {
    				return -1;
    			}
    		}
    		else {
    			if (debut > fin) {
    				return -1;
    			}
    			int mil = (debut + fin) / 2;
    			if (tableau[mil] == cle) {
    				return mil;
    			}
    			else if (cle < tableau[mil]) {
    				return recursifDichotomique(debut, mil, tableau,
    						cle);
    			} else {
    				return recursifDichotomique(mil+1, fin, tableau, cle);
    			}
    		}
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Cours : algorithmes et récursivité
    Par Community Management dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/10/2018, 00h38
  2. [Système] Récursivité et itération
    Par Floréal dans le forum Langage
    Réponses: 8
    Dernier message: 19/04/2005, 14h57
  3. Parcours d'arbre sans récursivité
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 12/04/2005, 13h57
  4. [PS] Récursivité !
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/10/2004, 12h18
  5. récursivité
    Par krimson dans le forum PostgreSQL
    Réponses: 12
    Dernier message: 06/05/2004, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo