| |
|
|
| depuis XProfan-sans-Grenzen ist es possible une schier unendliche Prozedurrekursion zur Abarbeitung trop bewegen.
malheureusement trifft cela pas sur eigene Funktionen trop, mais seulement sur Prozeduren.
Hierbei ist qui Schreibweise entscheidend. KompilierenMarqueSéparation stürzt beispielsweise très vite ab wogegen KompilierenMarqueSéparationunendlich (grenzenFrei comment versprochen) abgearbeitet wird.
je peux mir présenter cela Prf2CPP-Nutzer sowieso déjà toujours une unendliche Procédure/Funktionsrekursion abarbeiten laisser peut. @Sebastian: Ist dem so?
Büdde améliorer Roland.
ici encore un très anschauliches et simple Beispiel pour une Füll-Funktion quelle qui Rekursion utilise comme grenier. KompilierenMarqueSéparationCLS
USEPEN 0,0,0
RECTANGLE 1,1 - WIDTH(%HWND)-10,HEIGHT(%HWND)-10
LINE 10,10 - 200,20
LINE 200,20 - 50,300
LINE 50,300 - 100,50
LINE 100,50 - 10,10
ELLIPSE 300,200 - 500,400
F 120,100,GETPIXEL(120,100)
F 400,300,GETPIXEL(300,200)
PRINT bingo
WAITINPUT
proc F
PARAMETERS X&,Y&,TOFILL&
SETPIXEL X&,Y&,0
IF GETPIXEL(X&+1,Y&)=TOFILL&
F X&+1,Y&,TOFILL&
ENDIF
IF GETPIXEL(X&,Y&+1)=TOFILL&
F X&,Y&+1,TOFILL&
ENDIF
IF GETPIXEL(X&-1,Y&)=TOFILL&
F X&-1,Y&,TOFILL&
ENDIF
IF GETPIXEL(X&,Y&-1)=TOFILL&
F X&,Y&-1,TOFILL&
ENDIF
endproc
|
|
|
| |
|
|
|
Sebastian König | iF
je peux mir présenter cela Prf2CPP-Nutzer sowieso déjà toujours une unendliche Procédure/Funktionsrekursion abarbeiten laisser peut. @Sebastian: Ist dem so?
non, malheureusement pas - qui Aufruftiefe ist momentan sur 32 begrenzt. cela hat avec dem grenier-Management pour den Paramter-Stack trop 1faire...
MfG
Sebastian |
|
|
| |
|
|
|
| je comprends - et c'est très tant pis.
Zur 32: Erlaubte là Roland pas une deutlich höhere Rekursionstiefe? |
|
|
| |
|
|
|
Sebastian König | |
|
| |
|
|
|
| cette Testcode gibt une gewisse Auskunft: (unten qui exe) KompilierenMarqueSéparation//Version:0.0.3
{$cleq}
randomize
long i
cls
usepen 0,0,0
rectangle 1,1 - width(hwnd)-10,height(hwnd)-10
line 10,10 - 200,20
line 200,20 - 50,300
line 50,300 - 100,50
line 100,50 - 10,10
ellipse 300,200 - 500,400
f 400,300,getpixel(400,300)
f 120,100,getpixel(120,100)
f 400,300,getpixel(300,200)
print bingo
waitinput
end
f(long x,y,tofill){
i+
locate 1,20
print i
setpixel x,y,0
case getpixel(x+1,y)==tofill : f(x+1,y,tofill)
case getpixel(x,y+1)==tofill : f(x,y+1,tofill)
case getpixel(x-1,y)==tofill : f(x-1,y,tofill)
case getpixel(x,y-1)==tofill : f(x,y-1,tofill)
i-nt color=#0000FF>}
EDIT: Code et EXE révisée, es fehlte i- am Ende qui Funktion f.
avec dem neuen Code wird mir max 4.380 pour i angezeigt. |
|
|
| |
|
|
|
Sebastian König | Ok, qui numéro peux je bestätigen. réellement finde je dans qui XProfan-Aider Angabe pour qui maximale Aufruf-Verschachtelung, qui 32 habe je alors wohl selbst gewählt... Schien mir irgendwie un entier bon Kompromiss entre Performance et grenier-la dépense trop son. technique wäre es ne...aucune allzu großes Problem, qui frontière abzuschaffen - je muss seulement la fois regarder, si et comment très qui Geschwindigkeit au-dessous leiden serait...
MfG
Sebastian |
|
|
| |
|
|
|
Sebastian König | encore un Nachtrag...
Beim Betrachten meines eigenen Codes vois je justement, dass qui erlaubte Tiefe im Prinzip dans Profan2Cpp doch unendlich ist. Ab qui 33. plaine verhält sich qui Stack chez einem Aufruf comme Funktion allerdings ensuite genauso comment chez einem Aufruf comme Befehl. Soll appeler: qui übergeordnete Stack wird ensuite plus benutzt.... |
|
|
| |
|
|