Jump to content

récursivité 2


juliette5
Go to solution Solved by Shrex,

Recommended Posts

bonsoiiir, comme à mon habitude je comprend pas les programmes en info donc si quelqu'un avait la gentillesse de m'expliquer comment on fait pour ceux-là ça serai trop cool (n'importe lequel de toute façon j'en comprend aucun), mercii

https://zupimages.net/viewer.php?id=21/09/amb0.png

Link to comment
Share on other sites

  • Solution

Salut @juliette5! Je vais détailler le premier, essaie de suivre en même temps avec le programme sous les yeux pour comprendre le déroulement :

 

                                                gen(3,"<",">")

                gen(2,"<",">")                 +               gen(2,">","<")

gen(1,"<",">") + gen(1,">","<") + gen(1,">","<") + gen(1,"<",">")

 

Tu remarques qu'à chaque étape, la fonction se donne elle-même + avec les lettres inversées (et bien sûr avec nombre - 1)

 

                 gen(1,"<",">")                  +                   gen(1,">","<")                 +                    gen(1,">","<")                +                  gen(1,"<",">")

gen(0,"<",">") + gen(0,">","<")gen(0,">","<") + gen(0,"<",">")gen(0,">","<") + gen(0,"<",">")gen(0,"<",">") + gen(0,">","<")

 

Et là on se retrouve avec des 0 à nombre donc on valide notre condition ! Ce qui nous intéresse c'est lettre 1 :

 

gen(0,"<",">") + gen(0,">","<") + gen(0,">","<") + gen(0,"<",">")gen(0,">","<") + gen(0,"<",">")gen(0,"<",">") + gen(0,">","<")

             <                         >                         >                          <                         >                         <                          <                         >                         

 

soit au final <>><><<> et c'est bien ce qui est proposé !!

Bon j'ai préféré faire comme ça que un gros pavé d'explications parce que je savais pas trop comment m'y prendre pour expliquer, du coup j'ai décrit toutes les étapes, si tu veux des explications en plus hésite pas !!

 

Edit : j'ai oublié de dire que le 2ème programme est de la même trempe, si t'arrives à comprendre celui-là normalement t'auras pas de problèmes pour le 2ème, après si vraiment tu le comprends pas je pourrais le détailler...

Edited by Shrex
Link to comment
Share on other sites

Il y a 2 heures, Shrex a dit :

gen(1,"<",">") + gen(1,">","<") + gen(1,">","<") + gen(1,"<",">")

Salut ! Malgré ton super programme détaillé je comprends pas pourquoi c'est en double, il y a un truc qui m'échappe dans l'appel à la fonction.. 

 

Link to comment
Share on other sites

il y a 4 minutes, Phagocytose a dit :

Salut ! Malgré ton super programme détaillé je comprends pas pourquoi c'est en double, il y a un truc qui m'échappe dans l'appel à la fonction.. 

Une fonction s'appelle "2 fois", une fois pareille + une fois où on inverse les lettres

gen(2,"<",">")  ->  gen(1,"<",">") + gen(1,">","<")     et     gen(2,">","<")   ->  gen(1,">","<") + gen(1,"<",">")

 

Edited by Shrex
Link to comment
Share on other sites

il y a 43 minutes, Shrex a dit :

gen(2,"<",">")  ->  gen(1,"<",">") + gen(1,">","<")     et     gen(2,">","<")   ->  gen(1,">","<") + gen(1,"<",">")

Justement c'est ça que je comprends pas, pour moi ça faisait : 

gen(2,"<",">")  qui appelle gen(1,"<",">")  qui appelle gen(0,"<",">"+  gen(2,">","<") qui appelle gen(1,">","<")  qui appelle  gen(0,">","<") 

 

Link to comment
Share on other sites

@Shrex 

 

Je comprends pas le mécanisme, pourquoi elle appelle les 2 à la fois ? Alors que au départ on a def gen(nombre, lettre1, lettre2), pourquoi ça fait pas un par un (donc ce que j'avais écrit : gen(2,"<",">")  qui appelle gen(1,"<",">")  qui appelle gen(0,"<",">"+  gen(2,">","<") qui appelle gen(1,">","<")  qui appelle  gen(0,">","<")

 

Parce que du coup dans le programme que tu as écrit ça sous entend gen(nombre - 1,lettre1,lettre2) appelle  gen(nombre - 1,lettre1,lettre2) + gen(nombre - 1,lettre2,lettre1)  et que gen(nombre -1,lettre1,lettre2) appelle gen(nombre - 1,lettre1,lettre2) + gen(nombre - 1,lettre2,lettre1)  

Link to comment
Share on other sites

C'est la fonction qui est définie comme ça... je sais pas trop quoi rajouter... 

il y a 6 minutes, Phagocytose a dit :

Parce que du coup dans le programme que tu as écrit ça sous entend gen(nombre - 1,lettre1,lettre2) appelle  gen(nombre - 1,lettre1,lettre2) + gen(nombre - 1,lettre2,lettre1)  et que gen(nombre -1,lettre1,lettre2) appelle gen(nombre - 1,lettre1,lettre2) + gen(nombre - 1,lettre2,lettre1) 

C'est ce que fait le programme en fait... (à chaque fois que tu as une fonction gen faut qu'elle réalise le programme, j'ai détaillé la chose dans le premier message... à chaque fois que y a une fonction gen elle réalise le programme mais avec ses données à elle... et ce jusqu'à que nombre = 0 car là elle va rencontrer un return

Edited by Shrex
Link to comment
Share on other sites

@Shrex

Vu que je comprenais pas, j'ai écrit le programme autrement, j'ai fait

 

resultat1 += gen(nombre-1, lettre1, lettre2)

resultat2 += gen(nombre-1, lettre2, lettre1) 

resultat = retultat1 + resultat2 

return resultat 

 

Ça m'a pris du temps mais en combinant tes explications, le programme que t'as écrit et le programme que je me suis fait (normalement il donne la même chose.. fin j'espère !) compris je crois 🙂 

Link to comment
Share on other sites

@Phagocytose

Dans l'idée ça a l'air de marcher, mais je peux pas te le prouver à 100% vu que c'est un bout du programme... (j'ai l'impression que tu te compliques la vie haha)

Après dans l'idée ça a l'air de correspondre avec la démarche de base (mais je te conseille de lire plusieurs sujets de récursivité sur le forum car une fois que tu prends le coup ça facilite la vie !! mais c'est sûr que c'est extrêmement complexe)

Edited by Shrex
Link to comment
Share on other sites

Il y a 10 heures, Shrex a dit :

(j'ai l'impression que tu te compliques la vie haha)

Oui j'ai l'impression aussi 😅 mais sinon j'arrive pas à voir comment ça marche... 

Faut que je m'entraine pour aller plus vite, j'espère que je prendrais le coup comme tu dis 😁

 

Link to comment
Share on other sites

  • Ancien du Bureau

Aie oui @valouz, il est pas sympa celui là !

Je vais commencer par le recopier :

 

from printer import *

def gen(nombre, chiffre):
   if nombre == 0:
      return str(chiffre)
   return gen(nombre - 1, chiffre + 1) + gen(nombre - 1, chiffre - 1)

print(gen(2, 4))  

Il va falloir faire une sorte " d'arbre " pour voir bien comment il se déroule :

gen(2,4) 

gen(1,5) + gen(1,3)

gen(0,6) + gen(0,4) | gen(O,4) + gen(0,2)

= "6" | ="4" | = "4" | = "2"

 

Ensuite on remonte simplement en additionnant ce qu'on a trouvé (comme c'est des str on obtient bien 6442) !

C'est bon pour toi ?

Link to comment
Share on other sites

@Shrex

Je suis désolée de te solliciter à nouveau mais j'ai (encore) un problème concernant la récursivité. 

Pour m'entrainer j'ai voulu résoudre à la main le programme 1 et j'ai ensuite vérifié mes réponses en notant le programme sur PIXAL et je me suis aperçue que j'avais faux.. 

 

J'ai utilisé la méthode que tu as décrite plus haut

 

                                                  gen(2, "/") 

                            gen(1,"<") + lettre + gen(1,">")

gen(0,"<") + gen(0,">")  + lettre + gen(0,"<") + gen(0,">") 

 

=>  <>/<>

 

Sauf que quand j'ai effectué le programme, la réponse est   <<>/<>>

J'en ai déduis que les 2 trucs en plus venaient de du nombre 1 ("<,">")  mais je comprends pas pourquoi sachant que l'on retourne la lettre quand le nombre vaut 0 puisqu'il y a

 

if nombre == 0 :

    return lettre 

Link to comment
Share on other sites

  • Ancien du Bureau
il y a 6 minutes, Phagocytose a dit :

@Shrex

Je suis désolée de te solliciter à nouveau mais j'ai (encore) un problème concernant la récursivité. 

Pour m'entrainer j'ai voulu résoudre à la main le programme 1 et j'ai ensuite vérifié mes réponses en notant le programme sur PIXAL et je me suis aperçue que j'avais faux.. 

 

J'ai utilisé la méthode que tu as décrite plus haut

 

                                                  gen(2, "/") 

                            gen(1,"<") + lettre + gen(1,">")

gen(0,"<") + gen(0,">")  + lettre + gen(0,"<") + gen(0,">") 

 

=>  <>/<>

 

Sauf que quand j'ai effectué le programme, la réponse est   <<>/<>>

J'en ai déduis que les 2 trucs en plus venaient de du nombre 1 ("<,">")  mais je comprends pas pourquoi sachant que l'on retourne la lettre quand le nombre vaut 0 puisqu'il y a

 

if nombre == 0 :

    return lettre 

 

Hey ! Désolé c'est pas Shrex j'espère que tu m'en voudras pas :') 

 

Ton gen(0) deviendra bien <, sauf que gen(1,"<") est égal à gen(0,<) + lettre + gen(0,>), soit à <<>

Et pareil avec le gen(1,">") 

C'est plus clair ? 

Link to comment
Share on other sites

il y a 7 minutes, DuTACKauTac a dit :

Hey ! Désolé c'est pas Shrex j'espère que tu m'en voudras pas :')

Haha nonnnnnnn 

Du coup on prend en compte le < parce que  gen(1,"<") = gen(0,"<") + gen(0,">")  =>  <<>

Mais alors je comprends pas pourquoi on fait pas pareil avec l'autre programme (celui détaillé par Shrex) : on peut aussi dire que 

gen(2,"<",">") = gen(1,"<",">") + gen(1,">","<")

 

=> gen(2,"<",">") = gen(0,"<",">") + gen(0,">","<") gen(0,">","<") + gen(0,"<",">") 

 

et l'autre gen(2,">","<") =  gen(1,">","<") + gen(1,"<",">")

 

=> gen(2,">","<") =  gen(0,">","<") + gen(0,"<",">") gen(0,"<",">") + gen(0,">","<")

 

Donc on aurait en ajoutant les 2  <<>>< et >><<> 

=><<>>< >><<> 

 

 

Link to comment
Share on other sites

  • Ancien du Bureau
à l’instant, Phagocytose a dit :

Du coup on prend en compte le < parce que  gen(1,"<") = gen(0,"<") + gen(0,">")  =>  <<>

Nope ! On le prend pas en compte juste comme ça pour le plaisir ! :')

Si tu reregardes le programme, tu verras :

gen(nombre,lettre) = gen(nombre-1,"<") + lettre + gen(nombre-1,">")

Lettre correspond à la variable du programme en italique.

Donc si je reprends ton code couleur :

gen(1,"<") = gen(0,"<") + lettre + gen(0,">")  =>  <<>

Link to comment
Share on other sites

il y a 7 minutes, DuTACKauTac a dit :

gen(nombre,lettre) = gen(nombre-1,"<") + lettre + gen(nombre-1,">")

Lettre correspond à la variable du programme en italique.

Donc si je reprends ton code couleur :

gen(1,"<") = gen(0,"<") + lettre + gen(0,">")  =>  <<>

Ahhhhhh j'ai compris ! (j'y croyais pas 🤣

 

Merci beaucoup à vous 2 @DuTACKauTac et @Shrex 😌

Link to comment
Share on other sites

  • Ancien du Bureau
à l’instant, Phagocytose a dit :

Ahhhhhh j'ai compris ! (j'y croyais pas 🤣

 

Merci beaucoup à vous 2 @DuTACKauTac et @Shrex 😌

Super ! Il faut y croire mdrrr (franchement à chaque nouvelle semaine d'info je crois qu'on fait tous un mental breakdown mdrrr)

Avec plaisir, et bon courage !

Link to comment
Share on other sites

  • Ancien du Bureau
il y a 4 minutes, valouz a dit :

@DuTACKauTac merci beaucoup j'ai compris! c'est quand même complètement perché leurs bails 🙃

ça l'est ! Mais je te conseille de t'entrainer à le refaire encore et encore, et à force ça finit par paraître presque logique 

 

il y a 2 minutes, Phagocytose a dit :

Bon courage à toi aussi !

Merciiiii 🥰

Link to comment
Share on other sites

  • Ancien du Bureau
Le 04/03/2021 à 12:06, DuTACKauTac a dit :

Ensuite on remonte simplement en additionnant ce qu'on a trouvé (comme c'est des str on obtient bien 6442) !

 

 

déjà merci d'exister sur ce forum tes explications sont toujours hyper clean et efficaces, j'ai bugué 30 minutes en utilisant un faux raisonnement mais grâce à toi (encore) j'ai compris, j'te love <333333

 

 

Link to comment
Share on other sites

  • Ancien du Bureau
il y a une heure, Rara a dit :

 

déjà merci d'exister sur ce forum tes explications sont toujours hyper clean et efficaces, j'ai bugué 30 minutes en utilisant un faux raisonnement mais grâce à toi (encore) j'ai compris, j'te love <333333

 

 

 

Ooooooh mais t'es trop mims 🥺🥺🥺 ça me fait grave plaisir de lir ça merci beaucoup 🤗

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...