Jump to content

la récursivité sans commentaires ...


Go to solution Solved by Shrex,

Recommended Posts

Posted

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 

  • Ancien du Bureau
Posted

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 ? 

Posted (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 by cassolnousmanque
Posted (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 by Shrex
Posted (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 by cassolnousmanque
  • Solution
Posted
il y a 9 minutes, cassolnousmanque a dit :

c'est ça ?

xww8.gif

 

T'as l'air d'avoir compris !!! Juste trop fort en fait !!

Posted
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 😁

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

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