cassolnousmanque Posted March 5, 2021 Posted March 5, 2021 salut, je voulais savoir si on pouvait me réexpliquer la récursivité parce que je crois que je dois avoir un blocage des le départ vu que mes réponses sont aléatoires .. pourtant j'avais l'impression d'avoir compris mais manifestement non (du coup je peux pas vous dire exactement à quel moment je bloque vu que je le sais pas moi même !) mais déjà compter le nombre d'itérations j'arrive 1 fois sur 2 et quand on nous dit "le programme affiche 4" dans l'exemple des premiers qcm sur pixal, je comprends pas d'ou le 4 sort Quote
Ancien du Bureau Sans-Visage Posted March 5, 2021 Ancien du Bureau Posted March 5, 2021 Hey, je vais essayer de faire un exemple simple et du me dis si ça t'aide : Programme : def recursivite(chiffre) : if chiffre == 0 : return 0 return 1 + recursivite(chiffre-1) print( recursivite(3) ) Execution : On cherche recursivite 3 : 3 =/= 0 Donc recursivite 3 = 1 + recursivite(2) On cherche recursivite 2 : 2 =/= 0 Recursivite 2 = 1 + recursivite 1 On cherche recursivite 1 : 1 =/= 0 Recursivite 1 = 1 + recursivite 0 On cherche recursivite 0 : 0 == 0 Donc recursivite 0 = 0 Et maintenant on remonte : Recursivite 1 = 1 + 0 = 1 Recursivite 2 = 1 + 1 = 2 Recursivite 3 = 1 + 2 = 3 Donc le programme va afficher 3 Est-ce que t'as compris le mécanisme ? Shrex and Ilyatrogène 1 1 Quote
cassolnousmanque Posted March 5, 2021 Author Posted March 5, 2021 (edited) il y a 12 minutes, DuTACKauTac a dit : Hey, je vais essayer de faire un exemple simple et du me dis si ça t'aide : Programme : def recursivite(chiffre) : if chiffre == 0 : return 0 return 1 + recursivite(chiffre-1) print( recursivite(3) ) Execution : On cherche recursivite 3 : 3 =/= 0 Donc recursivite 3 = 1 + recursivite(2) On cherche recursivite 2 : 2 =/= 0 Recursivite 2 = 1 + recursivite 1 On cherche recursivite 1 : 1 =/= 0 Recursivite 1 = 1 + recursivite 0 On cherche recursivite 0 : 0 == 0 Donc recursivite 0 = 0 Et maintenant on remonte : Recursivite 1 = 1 + 0 = 1 Recursivite 2 = 1 + 1 = 2 Recursivite 3 = 1 + 2 = 3 Donc le programme va afficher 3 Est-ce que t'as compris le mécanisme ? pour celui là ça va oui mais je sais pas dans les qcm de la prof je comprends rien par exemple dans celui la Le programme suivant affiche 4 : from printer import * def maFonction(nombre): if nombre == 0: return 0 return maFonction(nombre // 2) + 1 print(maFonction(10)) donc je fais : 10=/=0 10/2 + 1 = 5 + 1 = 6 6=/=0 6/2 + 1 = 3 +1 = 4 4=/= 0 4/2 + 1 = 2 + 1 = 3 3 =/= 0 3/2 + 1 = 1 + 1 = 2 ? (parce que vu que c'est impair là, je sais pas si on prend que la valeur entiere pour 3/2 ce qui donnerait 1) 2=/=0 2/2 + 1 = 1 + 1 = 2 sauf que si je fais ça on n'arrive jamais à 0 donc voila je comprends pas là Edited March 5, 2021 by cassolnousmanque Quote
Shrex Posted March 5, 2021 Posted March 5, 2021 (edited) @cassolnousmanque Le problème vient du fait que tu rajoutes + 1 à chaque fois Quand tu vois maFonction(nombre//2) tu rappelles ta fonction avec nombre//2, le + 1 tu ne l'utilises QUE quand tu "remontes" il faut pas rappeler la fonction avec... Je détaille par rapport à ce que tu as fait : maFontion(10) : => 10=/=0 => 10//2 = 5 maFonction(5) : => 5=/=0 => 5//2 = 2 maFonction(2) : => 2=/= 0 => 2//2= 1 maFonction(1) : => 1 =/= 0 => 1//2 = 0 maFonction(0) : => 0 = 0 => return 0 et là tu peux remonter (et utiliser ton +1) : => maFonction(1) = 0 + 1 = 1 => maFonction(2) = 1 + 1 = 2 => maFonction(5) = 2 + 1 = 3 => maFonction(10) = 3 + 1 = 4 Est-ce que TACKompris ?? (haha oui je vole ta réplique @DuTACKauTac ) (dsl j'ai pas mis 50 couleurs comme d'hab, mais je peux toujours en mettre si tu veux plus de détails) Edited March 5, 2021 by Shrex cassolnousmanque and zazouette 1 1 Quote
cassolnousmanque Posted March 5, 2021 Author Posted March 5, 2021 (edited) il y a 8 minutes, Shrex a dit : @cassolnousmanque Le problème vient du fait que tu rajoutes + 1 à chaque fois Quand tu vois maFonction(nombre//2) tu rappelles ta fonction avec nombre//2, le + 1 tu ne l'utilises QUE quand tu "remontes" il faut pas rappeler la fonction avec... Je détaille par rapport à ce que tu as fait : maFontion(10) : => 10=/=0 => 10//2 = 5 maFonction(5) : => 5=/=0 => 5//2 = 2 maFonction(2) : => 2=/= 0 => 2//2= 1 maFonction(1) : => 1 =/= 0 => 1//2 = 0 maFonction(0) : => 0 = 0 => return 0 et là tu peux remonter (et utiliser ton +1) : => maFonction(1) = 0 + 1 = 1 => maFonction(2) = 1 + 1 = 2 => maFonction(5) = 2 + 1 = 3 => maFonction(10) = 3 + 1 = 4 Est-ce que TACKompris ?? (haha oui je vole ta réplique @DuTACKauTac ) (dsl j'ai pas mis 50 couleurs comme d'hab, mais je peux toujours en mettre si tu veux plus de détails) aaaah ! okkk je crois que j'ai compris le truc je vais refaire un qcm comme ça et je te dis si c'est bon ou pas du coup from printer import * def maFonction(nombre): if nombre > 100: return 0 return maFonction(nombre * 2) + 1 print(maFonction(10)) 10 < 100 10*2 = 20 20 <100 20 * 2 = 40 40 < 100 40 * 2 = 80 80< 100 80*2 = 160 160 > 100 => 0 on remonte ma fonction 80 = 0 +1 = 1 ma fonction 40 = 1+ 1 = 2 ma fonction 20 =2 + 1 = 3 ma fonction 10 = 3 + 1 = 4 c'est ça ? Edited March 5, 2021 by cassolnousmanque Quote
Solution Shrex Posted March 5, 2021 Solution Posted March 5, 2021 il y a 9 minutes, cassolnousmanque a dit : c'est ça ? T'as l'air d'avoir compris !!! Juste trop fort en fait !! Quote
cassolnousmanque Posted March 5, 2021 Author Posted March 5, 2021 il y a 1 minute, Shrex a dit : T'as l'air d'avoir compris !!! Juste trop fort en fait !! suuuuuppppeeeeerrrrrrr !!!!!!! (je manifeste ma joie comme je peux hein) merci beaucoup il y a 1 minute, Shrex a dit : Juste trop fort en fait !! en effet Quote
Emmapratz Posted March 19, 2021 Posted March 19, 2021 Le 05/03/2021 à 11:11, Shrex a dit : @cassolnousmanque Le problème vient du fait que tu rajoutes + 1 à chaque fois Quand tu vois maFonction(nombre//2) tu rappelles ta fonction avec nombre//2, le + 1 tu ne l'utilises QUE quand tu "remontes" il faut pas rappeler la fonction avec... Je détaille par rapport à ce que tu as fait : maFontion (10) : => 10=/=0 => 10//2 = 5 maFonction (5) : => 5=/=0 => 5//2 = 2 maFonction (2) : => 2=/= 0 => 2//2= 1 maFonction (1) : => 1 =/= 0 => 1//2 = 0 maFonction (0) : => 0 = 0 => retourne 0 et là tu peux remonter (et utiliser ton +1) : => maFonction(1) = 0 + 1 = 1 => maFonction(2) = 1 + 1 = 2 => maFonction(5) = 2 + 1 = 3 => maFonction(10) = 3 + 1 = 4 Est-ce que TACKompris ?? (haha oui je vole ta réplique @DuTACKauTac ) (dsl j'ai pas mis 50 couleurs comme d'hab, mais je peux toujours en mettre si tu veux plus de détails) Hello ! Perso j'ai pas compris pourquoi pour maFonction (10) on fait 3 + 1. Il sort d'où le 3 ? 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.