LoslegenKostenlos loslegen

Einen for-Loop abbrechen

Manchmal möchtest du eine Schleife beenden, bevor alle Iterationen durchlaufen sind. Zum Beispiel kann dein Code die Aufgabe schon vor dem Ausprobieren aller Möglichkeiten erfolgreich abschließen. Mit dem Schlüsselwort break kannst du eine Schleife frühzeitig verlassen.

Das Muster sieht so aus:

for(int i = 0; i < n; i++) {
  // Do something

  // Test for exiting early
  if(breakout_condition) break;

  // Otherwise carry on as usual
}

Hier überarbeitest du das vorherige Beispiel so, dass die Schleife stoppt, wenn sich der Wert nicht mehr zu stark ändert (basierend auf einem Schwellwert). Die Funktion wurde so angepasst, dass sie eine List zurückgibt (du lernst Lists im nächsten Kapitel kennen), sodass du bei jeder Iteration die Näherung sehen kannst.

Diese angepasste Funktion sqrt_approx() gibt sowohl die Quadratwurzel als auch die Anzahl der Iterationen zurück, die basierend auf dem Schwellwert für das Ergebnis benötigt wurden.

Diese Übung ist Teil des Kurses

R-Code mit Rcpp optimieren

Kurs anzeigen

Anleitung zur Übung

Füge eine Abbruchbedingung hinzu, die ausgelöst wird, wenn die Lösung gut genug ist (basierend auf der Variablen is_good_enough).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
List sqrt_approx(double value, int n, double threshold) {
    double x = 1.0;
    double previous = x;
    bool is_good_enough = false;
    int i;
    for(i = 0; i < n; i++) {
        previous = x;
        x = (x + value / x) / 2.0;
        is_good_enough = fabs(previous - x) < threshold;
        
        // If the solution is good enough, then "break"
        ___(___) ___;
    }
    return List::create(_["i"] = i , _["x"] = x);
}

/*** R
sqrt_approx(2, 1000, 0.1)
*/
Code bearbeiten und ausführen