Az egyik interjúmon kaptam egy ehhez hasonló feladatot, persze kiszórtak, mert azért az ember ritkán használ rekurziót. Eldurrant az agyam és megcsináltam, hogy legközelebb legyen fogalmam róla.
A cél az volt, hogy egymásba ágyazott movie clipeken átfutva megtaláljam a leginkább bal oldalon lévő objektum koordinátáit. Nem röhög, ezt találtam ki megoldandó példának.
//A rekurzív föggvény
function getMostLeft(cont):Number
{
//A cont beérkező objektum globális koordinátáit
//megkapjuk egy ideigelenes változóban
var globalPoint:Point = cont.localToGlobal(new Point(0,0));
//A kapott pont x koordinátája lesz az adott objektum
//referenciapontja az x tenegelyen
var mostleft:Number = globalPoint.x;
// Átfutunk a cont objektumunkban létező összes objektumon egy for ciklussal
for (var i:int = 0; i < cont.numChildren; i++)
{
var mc = cont.getChildAt(i);
if (mc is MovieClip)
{
// ha mc movie clip akkor belelépünk a rekurzív függvényünkbe, ahonnan
// megkapjuk az aktuális leginkább balra fekvő objektum
// x koordinátáját
var temp = getMostLeft(mc);
// ha ez az érték kisebb mint az eddigi legkisebb,
// akkor átírjuk a mostleft értékét
if (mostleft > temp){
mostleft = temp;
}
}
}
// visszaadjuk a mostleft értékét
return mostleft;
}
var mostleft:Number = getMostLeft(container);
trace (mostleft);
Hát ő lenne az. Meg lehet csinálni iteratív módszerrel is, de kicsit snassz ehhez képest :)