Jump to content

la récursivité sans commentaires ...


Go to solution Solved by Shrex,

Recommended Posts

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 

Link to comment
Share on other sites

  • Ancien du Bureau

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 ? 

Link to comment
Share on other sites

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 by cassolnousmanque
Link to comment
Share on other sites

@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 by Shrex
Link to comment
Share on other sites

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 by cassolnousmanque
Link to comment
Share on other sites

il y a 1 minute, Shrex a dit :

xww8.gif

 

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 😁

Link to comment
Share on other sites

  • 2 weeks later...
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 ? 

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...