Page 2 sur 2
Re: Procédure Récursive
Publié : mer. 12/juin/2019 22:06
par Shadow
Merci pour vos aide.
Effectivement Falsam, les variable sont bien locale à chaque appel.
J'ai résolut mon problème, merci à vous

Re: Procédure Récursive
Publié : jeu. 13/juin/2019 8:30
par microdevweb
G-Rom a écrit :
Bonjour falsam, non, le principe de la récursion est de justement jouer avec des variables propre à chaque procédure...
ce petit morceau de code démontre mes dires :
Assez d'accord avec G-Rom tous cela dépend de ce que l'on souhaite
Exemple avec pointeur
Code : Tout sélectionner
Procedure recurs(*v)
If PeekI(*v) < 100
PokeI(*v,PeekI(*v)+1)
Debug PeekI(*v)
recurs(*v)
EndIf
EndProcedure
Global myVal.i = 0
recurs(@myVal)
Debug "Final result : "+Str(myVal)
Re: Procédure Récursive
Publié : jeu. 13/juin/2019 9:26
par falsam
@G-Rom @microdevweb : Je vois qu'on se moque bande de mécréants
N'aurais je pas compris ces propos de shadow ?
shadow a écrit : ....j’obtiens une infinité de variable 'A' mais locale à chaque récursivité c'est bien ça ?
J'avais fais une réponse moqueuse suite au commentaire de shadow
https://www.purebasic.fr/french/viewtop ... 58#p204158
qui est pour moi une aberration infini.
Je vous laisse apprécier le code que propose shadow
Code : Tout sélectionner
Procedure MaProcedure()
A + 1 ; A (01) ici vaudra 1, 2
Delay(100)
If A < 3
MaProcedure()
EndIf
EndProcedure
ainsi que ces phrases
shadow a écrit :En procèdent comme ceci, effectivement il y à boucle infinie...
Ce qui m’intéresse de savoir, est ce que chaque variable est bien indépendante ?
La boucle est infinie certes ..... mais bloquante surtout car A aura toujours la valeur 1.
Re: Procédure Récursive
Publié : jeu. 13/juin/2019 11:45
par microdevweb
Shadow stay Shadow nobody can't be change that...

Re: Procédure Récursive
Publié : jeu. 13/juin/2019 12:11
par G-Rom
un exemple de récursivité un peu plus "graphique" :
bien entendu, c'est juste "informatif" , a ne pas utilisé en remplacement de linexy()...
Code : Tout sélectionner
OpenWindow(0,0,0,1024,768,"")
CanvasGadget(0,0,0,1024,768)
Procedure.b equals(A.d,B.d)
ProcedureReturn Bool( Abs(B-A) < 0.01 )
EndProcedure
Procedure DrawLineRecursive(x1.d,y1.d,x2.d,y2.d)
If equals(x1,x2) And equals(y1,y2)
ProcedureReturn 0
EndIf
midx.d = (x2 + x1) / 2
midy.d = (y2 + y1) / 2
DrawLineRecursive(x1,y1,midx,midy)
DrawLineRecursive(midx+0.001,midy+0.001,x2,y2)
Plot(midx,midy,0)
ProcedureReturn 0
EndProcedure
StartDrawing(CanvasOutput(0))
DrawLineRecursive(10,10,1014,758)
StopDrawing()
While #True
Repeat
event = WindowEvent()
If event = #PB_Event_CloseWindow
Break 2
EndIf
Until event = 0
Wend