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 :wink:

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

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