Rolf B: Rekursive Funktion liefert ungewünschtes Ergebnis

Beitrag lesen

Hallo Robert,

nein, das ist unproblematisch weil hinter jedem fclose ein return steht. Er kommt also nie zum anderen fclose. Und da dieses File eh nur dem Debugging dient, wird es vermutlich demnächst eh aus dem Code fliegen.

Aber - es wurde ja von Jochen schon angesprochen, dass es sinnvoll sei, Schleifen abzubrechen wenn ihre weitere Ausführung nichts mehr bringt. Das gilt für die Pixel in einer Zeile genau wie für die Suche über die Rows.

Ich gehe jetzt mal von der iterativen Version ohne die kaputte Rekursion aus. Hier kann man mit dem Level-Parameter von Break bzw. Continue die Lesbarkeit großartig versauen, aber dafür den Code auch kräftig eindampfen:

function suche_freiraum($line = 842,$img2) {
    $freiraum = 0;
    for ($myY = $line;$myY > 500;$myY--) {
        for ($myX = 0;$myX < 530;$myX++) {
            ...
            if ( /* Pixel bei (myX,myY) ist nicht weiß */ )
               $freiraum = 0;
               // Überspringe den Rest des myX UND myY-Durchlaufs!
               continue 2;       
            }
        }

        // Hier geht's nur hin wenn die Zeile weiß ist.
        if(++$freiraum == 150) {
            return $myY;
        }
    }
    return 0;
}

Rolf

--
sumpsi - posui - obstruxi