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)
*/