시작하기무료로 시작하기

for 루프 빠져나오기

때로는 반복을 모두 끝내기 전에 루프를 종료해야 할 때가 있어요. 예를 들어, 모든 가능성을 시도하기 전에 코드가 이미 작업을 끝낼 수 있습니다. 이런 경우 break 키워드를 사용해 루프를 일찍 빠져나올 수 있어요.

코드 패턴은 다음과 같습니다:

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

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

  // Otherwise carry on as usual
}

여기서는 이전 예제를 수정해, 값의 변화가 임계값 기준으로 충분히 작아지면 루프가 멈추도록 만들 거예요. 함수는 List를 반환하도록 바뀌었으며(다음 장에서 List에 대해 배웁니다), 이를 통해 각 반복 단계의 근사값을 확인할 수 있습니다.

이 수정된 sqrt_approx() 함수는 제곱근과 함께, 해당 임계값 기준의 결과에 도달하는 데 걸린 반복 횟수도 함께 반환합니다.

이 연습은 강의의 일부입니다

Rcpp로 R 코드 최적화하기

강의 보기

연습 안내

해가 충분히 근사한 경우(is_good_enough 변수 기준) 작동하는 break 조건을 추가하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

#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)
*/
코드 편집 및 실행