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

Pascal Discussion :

Comment contourner la récursivité ?


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut Comment contourner la récursivité ?
    Bonsoir,
    Si vous êtes un(e) habitué(e) du forum alors vous le savez déjà, en Tunisie, on enseigne la section Sciences de l'Informatique pour la première année. Et parmi les malheurs de la "mésaventure", la récursivité.
    On nous demande de récursifier à tort et à travers, toutes les procédures qu'on trouve. C'est très énervant ! Pour le calcul d'une factorielle, ça passe mais quand c'est pour un tri à bulles, on se demande si on a vraiment trouvé, puisqu'en réalité, la version récursive de ce tri, proposée par les enseignants, contient une boucle pour (for en Pascal). Ceci est un détail, rentrons dans le sujet.
    J'ai un test demain matin et j'ai envie de contourner toutes les questions demandant une solution récursive en donnant une solution itérative qui a l'air d'être récursive. Voilà mon idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procédure la_proc_rec(p1:type1; p2:type2.... faire:chaîne)
    si faire<>rien alors
           TRAITEMENT;
           TRAITEMENT;
           TRAITEMENT;
           la_proc_rec(p1,p2,....,"rien");
    fin si
    Voici un exemple moins abstrait, notamment sur une fonction qui remplit un tableau par n entiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure remplir(var T:tab; n:integer; faire:string);
    begin
    if faire<>'rien' then
    	begin
    	for i:=1 to n do
    		begin
    		write('remplir la case ',i,'  ');
    		readln(T[i]);
    		end;
                 remplir(t,5912,'rien');  {remplir(.....), c'est pour en faire une procédure récursive}
               {ici 5912 c'est pour rigoler car on peut mettre n'importe quoi}
     
    	end;
    end;
    Je vous demande de me donner vos avis.
    Merci!

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Sans vouloir te froisser, bien sûr, mon avis est que ce genre de chose ne va pas beaucoup plaire à ton enseignant.

    La présence d'une boucle (for, repeat, while) dans une procédure ou fonction n'enlève rien au caractère récursif de l'algorithme. Si l'on prend l'exemple du parcours d'une arborescence de répertoires avec affichage des noms de fichiers, on crée une routine Traitement_Répertoire qui, à l'aide d'une boucle, affiche les noms des fichiers et qui s'appelle elle-même lorsqu'elle rencontre un répertoire.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gio,

    Déjà répondu dans la section Algorithmes, à peu près la même chose que Alcatîz, en plus succinct.

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Le mieux c' est de faire comme le prof le demande puisque c' est lui qui va corriger ta copie. Si tu fais ce qui te viens à l' esprit, il sera peut etre enervé et tu aura une mauvaise note alors que tu peux l' eviter.

    Si tu veux coder pour toi meme ( jeux, divers,...), tu peux faire comme tu veux. Mais en attendant, fais comme le prof le veut.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Je comprend ce que vous voulez dire et apparemment vous êtes tous d'accord mais, si ma procédure est récursive, elle répond bien à l'exercice, non ?
    Si j'ai bien compris, le traitement itératif est censé être plus difficile à trouver. Si l'itératif est plus facile à trouver dans un cas donné, il est inutile de vouloir le rendre récursif ! J'accepterais qu'on me demande de dérécursifier mais pas le contraire.
    Conclusion : vous voulez dire que le professeur est le maître du jeu, s'il sent que je me moque de sa question, il peut me donner une très mauvaise note. Maintenant, supposons qu'il ait un ensemble de règles à suivre comme : si la procédure est récursive, que le traitement est fait, on donne le maximum de points... pensez-vous qu'il puisse donner une mauvaise note à la copie ?

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Dio,

    Si tu fais quelque chose qui ressemble au code que tu as posté, il verra bien bien qu'en fait le traitement proprement dit n'est pas récursif (ou alors c'est une nouille ), et donc sévira probablement.

    Comme tu le dis, c'est lui qui mène le jeu, et que le jeu soit stupide ou pas, tu dois jouer selon les règles qu'il définit.

    Un prof de plus à fusiller sans tarder.

  7. #7
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour
    Je crois que tu ne comprends pas tres bien.
    Je te donne un exemple Je me souviens quand j'etais en Terminal ,à un examen de Math, bien que le profs se sont rendus qu'il y avait une erreur dans un probleme ,il n'ont pas corrigé et on laissé faire. Dans ce cas de situation les initiatives venant de la part de l'etudiant sont tres bien bienvenues (c'est a dire corriger l'exercice et faire bien le travail demandé ).
    Mais dans ton cas le prof ne reflechira meme pas à deux fois avant de te donner une tres mauvaise note .
    Un autre le prof donne exercice sur la recursivité et toi tu lui sort un truc iteratif alors je crois que si c'est sur 5 tu auras 1 ou meme 0.5 .
    Par contre tu peux tout de meme demander au prof des explications sur le pourquoi sur ces genres d'exercices
    Cordialement

  8. #8
    Membre très actif
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Par défaut Re : Bonjour
    en première année j'ai eu à peu prés le même problème si ce n'est pire avec un enseignant dans la solution d'un exercice l'enseignant avait utilisé une boucle while et moi j'avais utilisé une boucle for parce que c'était plus adapté à mon gout eh ben résultat j'ai eu 0 pour cet exo quand j'ai demandé au prof il m'a dit dans la correction y a un while toi t'a mis un for depuis ce jour j'obéis au doigt et à l'œil au prof en tout cas tant que je suis à l'univ
    faut faire comme dit le prof même si c'est du n'importe quoi toi tu sais le juste du faut on est au 21siécle y a internet , developpez dieux merci.
    cordialement @+

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/01/2012, 09h54
  2. [SOAP] [VBA] Comment contourner le probleme des "Complex types" ?
    Par jaudouy dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/09/2007, 12h00
  3. Réponses: 13
    Dernier message: 22/06/2006, 09h00
  4. Réponses: 6
    Dernier message: 05/04/2006, 14h14
  5. Comment contourner l'erreur ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/07/2005, 10h21

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