recursion, je ne comprend pas cet algo - Algo - Programmation
Marsh Posté le 08-03-2004 à 14:29:37
ps : le code est bon, mais je le comprend pas (je dis ca au cas ou 
)
Marsh Posté le 08-03-2004 à 22:23:08
[citation=667267,1] 
voila comment je m y prend : 
 
prenons 2^6 
tmp = raised2 (6/2) 
 la on passe a une nouvelle couche de la pile 
  tmp = raised2(3/2) 
    idem 
      tmp = raised2 (1/2) 
        idem 
          i==0 retrun 1 
c est apres que je suis perdu, il en fait quoi du  1 ? il ne passe pas directement a  
 if (i%2==0) return tmp * tmp; 
else return 2*tmp*tmp; 
 
  
  
[/citation] 
 
bah il renvoie donc 1 et on se trouve au niveau du test  
if (i%2==0) return tmp * tmp; 
else return 2*tmp*tmp; 
 
à ce moment là, i = 1 donc i%2 = 1 et la fonction renvoie donc 2*1*1 = 2. 
On remonte donc d'un niveau et on se retrouve encore une fois devant le test mais avec cette fois ci i = 3. 3 est impair et la fonction renvoie donc 2*2*2 = 8; 
On remonte encore d'un niveau et on fait le test : 8 est pair et donc finalement la fonction renvoie 8*8=64=2^6. 
 
De toute façon, ce n'est pas magique, à chaque appel récursif, tu mémorises l'état de l'appel en cours et tu passes à un nouvel appel. Quand tu as le résultat, tu reprends l'appel en cours. C'est pas toujours facile à voir mais le papier/crayon est ton ami  
 
 
Marsh Posté le 08-03-2004 à 14:12:37
il nexisterai pas sous linux une appli qui permettent de decomposer les actions d une fonction recursive en " retracant " le chemin ?
par ce que j ai dut mal avec ca
exemple pour 2^i
voila comment je m y prend :
prenons 2^6
tmp = raised2 (6/2)
la on passe a une nouvelle couche de la pile
tmp = raised2(3/2)
idem
tmp = raised2 (1/2)
idem
i==0 retrun 1
c est apres que je suis perdu, il en fait quoi du 1 ? il ne passe pas directement a
if (i%2==0) return tmp * tmp;
else return 2*tmp*tmp;