[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