oui !
dans une procedure en principe rien ne sort (aucune variable) (surtout avec "Protected" ) on lui a mis un gardien derriere les fesses ..
une procedure commence par poser sur la pile le context de son appel, et aussi les variables (donc local) qu'elle doit utiliser !
ces variables sont domestiquées !
il faut donc attendre le dépilement de chaque variable pour retrouver les contexte d'avant l'appel de la procedure
comme une pile d'assiettes ...
donc l'assiette jaune (la variable local ) se trouve quelque part dans la pile ...
pour pouvoir recuperer sa couleur (jaune ) (son contenu ) il faut preciser a la procedure qu'on veux une copie de sa valeur (jaune )
avec le mot Shared .... qui veux dire en gros :
cette variable, tu peux l'empiler , mais garde un oeil dessus, histoire de connaitre toujours sa valeur (sa couleur)
alors qu'une variable Global, c'est une variable Sauvage, elle est libre comme l'air
meme enfermé dans une procedure, elle peut traverser les murs

la procedure, ne peux pas empecher qu'on change sa valeur de l'exterieur

j'espere que mon image n'est pas trop virtuel
dans un appel recursif, une variable local , s'empile a chaque appel de la procedure, qui s'appel elle-meme
mais en realité , la variable locale A du premier appel de procedure
n'est pas la meme que la variable A du deuxiemme appel
car les deux valeur ont eté empilés !!
ça se depile a la fin au moment du END PROCEDURE
autant il y a eu d'appels , et donc d'empilements
autant il y aura de désempilement a la fin de chaque appel recursif
c'est d'ailleurs pourquoi l'utilisation de procedures pour certains traitement est trop long (perte durant l'empilement/depillement )
meme si c'ets hyper rapide de nos jours