Recherche Maximum en récursivité

gZpg77 - Modifié le 1 oct. 2020 à 17:44
Whismeril
Messages postés
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
- 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
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
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
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
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
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
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
17336
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
20 mai 2022
596
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