ÎncepețiÎncepe gratuit

Ieșirea dintr-o buclă for

Uneori poate vrei să ieși dintr-o buclă înainte de a finaliza toate iterațiile. De exemplu, codul tău poate rezolva sarcina înainte de a epuiza toate posibilitățile. Cuvântul cheie break poate fi folosit pentru a ieși dintr-o buclă înainte de timp.

Modelul de cod arată astfel:

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

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

  // Otherwise carry on as usual
}

Aici vei rescrie exemplul anterior astfel încât bucla să se oprească atunci când valoarea nu se mai modifică semnificativ (pe baza unui prag). Funcția a fost modificată pentru a returna un List (vei învăța despre List-uri în capitolul următor), permițându-ți să vezi aproximarea la fiecare iterație.

Această funcție sqrt_approx() modificată returnează atât rădăcina pătrată, cât și numărul de iterații necesare pentru a obține rezultatul, în funcție de pragul stabilit.

Acest exercițiu face parte din cursul

Optimizarea codului R cu Rcpp

Vezi cursul

Instrucțiuni pentru exercițiu

Adaugă o condiție de ieșire care se declanșează dacă soluția este suficient de bună (pe baza variabilei is_good_enough).

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

#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)
*/
Editează și rulează codul