Bắt đầu ngayBắt đầu miễn phí

Thoát khỏi vòng lặp for

Đôi khi bạn muốn thoát khỏi vòng lặp trước khi hoàn thành tất cả lượt lặp. Ví dụ, mã của bạn có thể hoàn thành nhiệm vụ trước khi thử hết mọi khả năng. Từ khóa break dùng để dừng vòng lặp sớm.

Mẫu mã trông như sau:

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

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

  // Otherwise carry on as usual
}

Ở đây bạn sẽ chỉnh lại ví dụ trước sao cho vòng lặp dừng khi giá trị không thay đổi quá nhiều (dựa trên một ngưỡng). Hàm đã được sửa để trả về một List (bạn sẽ học về List trong chương sau), cho phép bạn xem giá trị xấp xỉ ở mỗi lượt lặp.

Hàm sqrt_approx() đã chỉnh sửa trả về cả căn bậc hai và số lượt lặp cần thiết để đạt kết quả dựa trên ngưỡng.

Bài tập này là một phần của khóa học

Tối ưu hóa mã R với Rcpp

Xem khóa học

Hướng dẫn bài tập

Thêm điều kiện dừng bằng break khi nghiệm đã đủ tốt (dựa trên biến is_good_enough).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

#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)
*/
Chỉnh sửa và Chạy Mã