| |
|
|
| Seit XProfan-sin-Grenzen es posible una schier unendliche Prozedurrekursion a Abarbeitung a bewegen.
Leider trifft el no en propio Características a, pero sólo en Prozeduren.
Hierbei Es el Schreibweise entscheidend. KompilierenMarcaSeparación stürzt por ejemplo muy rápidamente de wogegen KompilierenMarcaSeparaciónunendlich (grenzenFrei como versprochen) abgearbeitet se.
Puedo me vorstellen el Prf2CPP-Nutzer sowieso ya siempre una unendliche Procedimiento/Funktionsrekursion abarbeiten dejar puede. @Sebastian: Ist el así?
Büdde verbessern Roland.
Hier todavía una muy anschauliches y einfaches Ejemplo para una Füll-Función welche el Rekursion nutzt como Speicher. KompilierenMarcaSeparaciónCLS
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
Puedo me vorstellen el Prf2CPP-Nutzer sowieso ya siempre una unendliche Procedimiento/Funktionsrekursion abarbeiten dejar puede. @Sebastian: Ist el así?
Nein, por desgracia, no - el Aufruftiefe es momentan en 32 begrenzt. Das ha con el Speicher-Management para el Paramter-Stack a tun...
MfG
Sebastian |
|
|
| Windows XP, XProfan/Profan² 4.5 bis 11 Profan2Cpp-Homepage: [...] Alte Profan²-Seite: [...] | 13.02.2008 ▲ |
|
|
|
|
| Yo verstehe - y es muy schade.
A 32: Erlaubte como Roland no una deutlich höhere Rekursionstiefe? |
|
|
| |
|
|
|
Sebastian König | |
|
| Windows XP, XProfan/Profan² 4.5 bis 11 Profan2Cpp-Homepage: [...] Alte Profan²-Seite: [...] | 13.02.2008 ▲ |
|
|
|
|
| Dieser Testcode son una gewisse Auskunft: (unten el exe) KompilierenMarcaSeparación//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 y EXE überarbeitet, lo fehlte i- al Ende el Función f.
Mit el neuen Code se me max 4.380 para i adecuado. |
|
|
| |
|
|
|
Sebastian König | Ok, el Zahl kann Yo bestätigen. Tatsächlich finde Yo en el XProfan-Ayuda Angabe para el maximale Aufruf-Verschachtelung, el 32 Yo also wohl incluso gewählt... Schien me irgendwie una bastante guter Kompromiss zwischen Performance y Speicher-Verbrauch a ser. Technisch wäre lo kein allzu großes Problema, el Grenze abzuschaffen - Yo muss sólo veces schauen, si y cómo muy el Geschwindigkeit darunter leiden sería...
MfG
Sebastian |
|
|
| Windows XP, XProfan/Profan² 4.5 bis 11 Profan2Cpp-Homepage: [...] Alte Profan²-Seite: [...] | 13.02.2008 ▲ |
|
|
|
|
Sebastian König | Noch una Apéndice...
Beim Betrachten meines eigenen Codes sehe Yo gerade, dass el erlaubte Tiefe en el Principio en Profano2Cpp doch unendlich es. Ab el 33. Ebene verhält se el Stack en una Aufruf como Función allerdings entonces genauso como en una Aufruf como Befehl. Soll heißen: el übergeordnete Stack se entonces más benutzt.... |
|
|
| Windows XP, XProfan/Profan² 4.5 bis 11 Profan2Cpp-Homepage: [...] Alte Profan²-Seite: [...] | 13.02.2008 ▲ |
|
|
|