Quote:
Originally Posted by Requi
Ja das weiß ich auch  .
Hab es sogar geschafft indem ich ein Funktion gelöscht habe.
If Not isarray() Then
Fliegenteil
Else
Pallateil
EndIf
|
mal zur info... rekursion bedeutet, das die funktion sich selbst x mal aufruft. es gibt also IMMER eine abbruch bedingung, welche unendliche rekursion vermeiden muss.
rekursion ist gegenüber iterativer alternativen immer ineffizienter, dabei aber immer deutlich einfacher formulierbar. sie ist dadurch keinesfalls wie oben geschrieben immer zu vermeiden.
insbesondere weil in autoit das parsen des quellcodes in der regel durchaus die meisten ressourcen frisst.
kleines beispiel anhand einer funktion, welche hex strings umkehrt:
Code:
Func IterativeReverseHex($hexString)
Local $return
For $i = StringLen($hexString) + 1 To 1 Step -2
$return &= StringMid($hexString, $i, 2)
Next
Return '0x'&$return
EndFunc
Func RecursivReverseHex($hexString, $return="")
If $hexString = "" Then Return '0x'&$return
Return RecursivReverseHex(StringTrimLeft($hexString,2), StringLeft($hexString,2)&$return)
EndFunc
ConsoleWrite(RecursivReverseHex('05000000')&@CRLF)
ConsoleWrite(IterativeReverseHex('05000000')&@CRLF)
hier ist schön erkennbar, das sich viele probleme rekursiv als zweizeiler lösen lassen, während iterativ deutlich mehr logik und oft auch deutlich ineffizientere methoden notwendig sind (im beispiel stringmid, welches immer ineffizienter ist als stringleft).
soviel zum thema der rekursion...
was dein eigentlicher code aber sichtlich macht ist, das du allgemein ein sehr schlechtes verständnis von scriptsprachen hast. da scriptsprachen in der regel nicht multithreading fähig sind, müssen wir für einen ersatz sorgen, indem wir uns der einfachen automatenlogik bedienen.
diese besagt nichts anderes, als das sich unser programm zu jedem beliebigen zeitpunkt in einem bestimmten zustand befindet. je nach zustand reagieren wir dann unterschiedlich.
sobald du diese aussage wirklich verstanden hast, wirst du in einem programm NIEMALS mehr als eine endlosschleife (iterativ natürlich) benötigen.
nichts anderes hast du dort übrigens intuitiv in deiner eigenen lösung gemacht. da ich davon ausgehe, das dein code aber mehr als nur diese 2 funktionen beinhaltet, solltest du das ganze noch weiter vereinfachen, bis du wirklich nurnoch eine hauptschleife hast, in der dein ganzes programm läuft.