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, Gathou, Odontoboulot and 4 others 1 1 3 2 Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 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.. Quote
Shrex Posted March 3, 2021 Posted March 3, 2021 (edited) 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 March 3, 2021 by Shrex Quote
Phagocytose Posted March 3, 2021 Posted March 3, 2021 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,">","<") 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... 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 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 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 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 ? valouz and Shrex 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 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 ? Shrex 1 Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 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 >><<> =><<>>< >><<> Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 à 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,">") => <<> Quote
Phagocytose Posted March 4, 2021 Posted March 4, 2021 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 ! Shrex and Sans-Visage 2 Quote
Ancien du Bureau Sans-Visage Posted March 4, 2021 Ancien du Bureau Posted March 4, 2021 à 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 ! 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 il y a 33 minutes, DuTACKauTac a dit : (franchement à chaque nouvelle semaine d'info je crois qu'on fait tous un mental breakdown mdrrr) 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 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 valouz 1 Quote
Ancien du Bureau Vaiana Posted March 5, 2021 Ancien du Bureau Posted March 5, 2021 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 Quote
Ancien du Bureau Sans-Visage Posted March 5, 2021 Ancien du Bureau Posted March 5, 2021 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 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.