Recherche Maximum en récursivité

gZpg77 - Modifié le 1 oct. 2020 à 17:44
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 2 oct. 2020 à 10:49
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

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
1 oct. 2020 à 23:21
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
1
gZpg77 Messages postés 2 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 2 octobre 2020
Modifié le 2 oct. 2020 à 00:16
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


0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
2 oct. 2020 à 10:49
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
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
1 oct. 2020 à 22:15
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.
0
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);
}
}
}
//
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
2 oct. 2020 à 09:32
Comment ferais tu avec une boucle while?
0
gZpg77 Messages postés 2 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 2 octobre 2020
2 oct. 2020 à 10:37
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
0
Rejoignez-nous