juliette5 Posted March 2, 2021 Posted March 2, 2021 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 cassolnousmanque 1 Quote
Solution Shrex Posted March 3, 2021 Solution Posted March 3, 2021 (edited) 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 March 3, 2021 by Shrex Métacarposaure, Soleilne, Gathou and 4 others 1 1 3 2 Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 On 3/3/2021 at 8:25 AM, Shrex said: gen(1,"<",">") + gen(1,">","<") + gen(1,">","<") + gen(1,"<",">") Expand 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.. Quote
Shrex Posted March 3, 2021 Posted March 3, 2021 (edited) On 3/3/2021 at 11:30 AM, Phagocytose said: 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.. Expand 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 March 3, 2021 by Shrex Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 On 3/3/2021 at 11:35 AM, Shrex said: gen(2,"<",">") -> gen(1,"<",">") + gen(1,">","<") et gen(2,">","<") -> gen(1,">","<") + gen(1,"<",">") Expand 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,">","<") Quote
Shrex Posted March 3, 2021 Posted March 3, 2021 Dans la fonction gen(nombre,lettre1,lettre2) appelle gen(nombre - 1,lettre1,lettre2) + gen(nombre - 1,lettre2,lettre1) Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 @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) Quote
Shrex Posted March 3, 2021 Posted March 3, 2021 (edited) C'est la fonction qui est définie comme ça... je sais pas trop quoi rajouter... On 3/3/2021 at 12:56 PM, Phagocytose said: 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) Expand 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 March 3, 2021 by Shrex Quote
juliette5 Posted March 3, 2021 Author Posted March 3, 2021 @Shrex non elle est super ton explication avec les couleurs !! j'ai compris celui la merci beaucoup :)) et du coup je vais essayer avec les autres pour voir si j'ai réellement compris Shrex 1 Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 @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 Quote
Shrex Posted March 3, 2021 Posted March 3, 2021 (edited) @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 March 3, 2021 by Shrex Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 On 3/3/2021 at 11:04 PM, Shrex said: (j'ai l'impression que tu te compliques la vie haha) Expand 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 Quote
valouz Posted March 4, 2021 Posted March 4, 2021 @Shrex@DuTACKauTacce coup-ci normalement j'ai bien regardé et il n'y a pas d'explications sur le programme où il faut trouver 6442 . En fait je sens que je suis pas loin de le comprendre ce programme mais je ne le comprends pas à 100%. Vous pourriez m'aider ? Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 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 ? Shrex and valouz 1 1 Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 @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 Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 On 3/4/2021 at 11:29 AM, Phagocytose said: @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 Expand 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 ? Shrex 1 Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 On 3/4/2021 at 11:40 AM, DuTACKauTac said: Hey ! Désolé c'est pas Shrex j'espère que tu m'en voudras pas :') Expand 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 >><<> =><<>>< >><<> Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 On 3/4/2021 at 11:58 AM, Phagocytose said: Du coup on prend en compte le < parce que gen(1,"<") = gen(0,"<") + gen(0,">") => <<> Expand 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,">") => <<> Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 On 3/4/2021 at 12:01 PM, DuTACKauTac said: 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,">") => <<> Expand Ahhhhhh j'ai compris ! (j'y croyais pas ) Merci beaucoup à vous 2 @DuTACKauTac et @Shrex ! Shrex and Sans-Visage 2 Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 On 3/4/2021 at 12:11 PM, Phagocytose said: Ahhhhhh j'ai compris ! (j'y croyais pas ) Merci beaucoup à vous 2 @DuTACKauTac et @Shrex ! Expand 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 ! Quote
valouz Posted March 4, 2021 Posted March 4, 2021 @DuTACKauTac merci beaucoup j'ai compris! c'est quand même complètement perché leurs bails Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 On 3/4/2021 at 12:12 PM, DuTACKauTac said: (franchement à chaque nouvelle semaine d'info je crois qu'on fait tous un mental breakdown mdrrr) Expand Tellement ça.. ça plombe le week end ^^ Bon courage à toi aussi ! Sans-Visage 1 Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 On 3/4/2021 at 12:45 PM, valouz said: @DuTACKauTac merci beaucoup j'ai compris! c'est quand même complètement perché leurs bails Expand ça l'est ! Mais je te conseille de t'entrainer à le refaire encore et encore, et à force ça finit par paraître presque logique On 3/4/2021 at 12:47 PM, Phagocytose said: Bon courage à toi aussi ! Expand Merciiiii valouz 1 Quote
Ancien du Bureau Vaiana Posted March 5, 2021 Ancien du Bureau Posted March 5, 2021 On 3/4/2021 at 11:06 AM, DuTACKauTac said: Ensuite on remonte simplement en additionnant ce qu'on a trouvé (comme c'est des str on obtient bien 6442) ! Expand 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 Quote
Ancien du Bureau Sans-Visage Posted March 5, 2021 Ancien du Bureau Posted March 5, 2021 On 3/5/2021 at 5:12 PM, Rara said: 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 Expand Ooooooh mais t'es trop mims ça me fait grave plaisir de lir ça merci beaucoup Vaiana 1 Quote
Recommended Posts
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.