Recherche Maximum en récursivité

Signaler
-
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
-
Bonjour,
J'ai un Dm à rendre et j'ai un problème sur l'exercice suivant:

Ecrire la methode qui Recherche l'indice du maximum d'un tableau de manière récursive
Si le tableau est null ou de longueur 0 retourner -1
voici le commentaire de mon prof (Au cours de la récursivité, tu as un maximum temporaire que tu es obligé de conserver au fil des appels pour comparer chacune des valeurs au max en cours, le modifier si besoin avant de le retourner).

je pense que c'est uniquement la parti du 4ième if qui est fausse mais je sais pas quoi mettre, ça fait plusieurs jours que j'essaie de comprendre.
voici mon code:

static int MaximumRecursif(int[] t, int cpt=0, int resul=0)                   
{                   
    // TO COMPLETE                   
    if (t.Length==0)                   
    {                   
        return -1;                   
    }                   
    if (cpt<t.Length-1)            // Si le compteur est inférieur à la longeur du tableau       
    {                   
        if (resul<t[cpt])                   // si le nombre comparé est supérieur au maximum temporaire
        {                   
            return MaximumRecursif(t,cpt+1, t[cpt]);                   
        }                   
    }                   
    if (resul>t[cpt])                   //si le nombre comparé est inférieur au maximum temporaire
    {                   
        return MaximumRecursif(t,cpt+1, t[cpt]);                   
    }                   
    return cpt;                   
}


Merci de votre aide.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.

4 réponses

Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
Déjà, merci de faire l'effort d'utiliser la coloration syntaxique, pour que ton code soit lisible.

Buno t'as mis un lien en corrigeant ton premier message, c'est un petit tuto sur la marche à suivre.


Ensuite, tu ne peux pas savoir à l'avance quand le maximum est atteint

Supposons 3 tableaux
int[] t1 = { 7, 2, 8, 3, 9, 4, 10, 5 }; // le maximum est l'avant dernier
int[] t2 = { 11, 2, 8, 3, 9, 4, 10, 5 }; // le maximum est le premier
int[] t3 = { 7, 2, 8, 3, 9, 4, 10, 12 }; // le maximum est le dernier


Pour le savoir, il faut avoir parcouru le tableau entier.
Ton algorithme doit donc parcourir le tableau entier et ensuite retourner la position du maximum
Messages postés
2
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
2 octobre 2020

mais c'est justement ça le problème j'arrive pas à voir comment on fait...
ça fait depuis cet après midi, que je bloque dessus.
On doit coder sur schooding uniquement la méthode.
c'est le message de ma prof, lorsque je lui ai dit que je ne voyais pas comment on peut trouver le max sans parcourir entièrement le tableau: Au cours de la récursivité, tu as un maximum temporaire que tu es obligé de conserver au fil des appels pour comparer chacune des valeurs au max en cours, le modifier si besoin avant de le retourner


Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
Je ne t’ai pas demandé de rentré un code dans ton truc (que je ne connais pas), mais comment tu ferais (au conditionnel) et de poster le code ici
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
Bonsoir

regardons des morceaux de ton code

    if (cpt<t.Length-1)    
    {                   
            //...
    }                   
    if (resul>t[cpt]) //si cpt est trop grand, tu vas avoir un dépassement d'index ici
    {                   
        //                 
    }   




              
        if (resul<t[cpt]) 
        {                   
            return MaximumRecursif(t,cpt+1, t[cpt]);                   
        }                   
            
    if (resul>t[cpt]) 
    {                   
        return MaximumRecursif(t,cpt+1, t[cpt]);                   
    }   

Que resul soit inférieur ou supérieur à la valeur courante tu fais la même chose, c'est pas logique.
merci j'ai essayé de le corrigé mais ça marche toujours pas, je ne sais pas comment arrêter le programme lorsque le maximum est atteint.
il faudrait peut être mettre que si resul est inférieur à la valeur courante, on enregistre sa position et si une autre valeur courante est supérieur à resul alors elle devient resul ?

//
if(t[cpt]<resul) // si la valeur courante est inférieur à resul
{

if (resul<t[cpt+1]) // si resul est inférieur à la valeur courante suivante.
{
resul=t[cpt+1];
return MaximumRecursif(t,cpt+1, resul);
}
}
}
//
Messages postés
14936
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
29 octobre 2020
447
Comment ferais tu avec une boucle while?
Messages postés
2
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
2 octobre 2020

justement si je met une boucle while ou for , je passe pas le test 1. Schooding ne valide pas le test 1 s'il y'a une boucle