Auf der Suche nach einer Möglichkeit eine for-each-Schleife abzubrechen, nachdem eine korrekte Zahl gefunden wurde, bin ich nun auf Rekursion gestoßen.
Eingangs ist es ja so, dass die Schleife nach dem finden und ausführen der inneren if-Anweisung mit allen übrigen Elementen verfährt/vergleicht. Durch die Rekursion soll sich die Schleife erneut aufrufen. Diese vergleicht dann zwar wieder alle Elemente, aber macht nach dem finden nicht weiter. So dachte ich es mir jedenfalls. Mir ist klar, dass Rekursionen Risiken birken und dies mit bedacht eingesetzt werden sollten. Ist mein Gedankengang so richtig?
Vielleicht habt ihr ja noch Alternativen. Würde mich freuen
void searchNumber() {
byte var;
int numbers[] = {1, 2, 3, 4, 5};
for (int number : numbers) {
if (number == var) {
Serial.println("Zahl gefunden: " + String(number));
searchNumber();
}
}
}
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Warum so umständlich? Schau Dir mal break an oder packe die Schleife in eine unktion und springe mit return true zurück bzw. return false am Ende, wenn die Zahl nicht gefunden wurde.
Zu "Vorzeitige Beendigung von Schleifen - Rekursion?!"
wäre mein Senf:
Ganz im Gegenteil.
Dein Vorschlag führt dazu, dass statt eines Schleifenabbruchs das Ganze rekursiv von vorne gestartet wird und so direkt zu einem undefinierten Verhalten (im Volksmund "Crash/Absturz") führt. Wie oft da die jeweilige Erfolgs-Ausgabe noch wiederholt wird, ist auch undefiniert.
Zum vorzeitigen Ende einer Schleife wurde break; erfunden. Oft kann man in Funktionen auch direkt ein return verwenden.