for döngüsünden çıkmak
Bazen tüm yinelemeleri bitirmeden bir döngüden çıkmak isteyebilirsin. Örneğin, tüm olasılıkları denemeden önce kodun görevini başarıyla tamamlayabilir. break anahtar sözcüğü, bir döngüden erken çıkmak için kullanılabilir.
Kod kalıbı şöyle görünür:
for(int i = 0; i < n; i++) {
// Do something
// Test for exiting early
if(breakout_condition) break;
// Otherwise carry on as usual
}
Burada, önceki örneği, değer eşik temelli olarak çok fazla değişmediğinde döngü dursun diye yeniden düzenleyeceksin. Fonksiyon, her yinelemedeki yaklaşımı görebilmeni sağlamak için bir List döndürecek şekilde değiştirildi (Listleri bir sonraki bölümde öğreneceksin).
Bu değiştirilmiş sqrt_approx() fonksiyonu, hem karekökü hem de bu sonuca eşiğe göre ulaşmak için geçen yineleme sayısını döndürür.
Bu egzersiz, kursun bir parçasıdır
Rcpp ile R Kodunu Optimize Etme
Egzersiz talimatları
Çözüm yeterince iyiyse ("isgoodenough" değişkenine göre) tetiklenecek bir break koşulu ekle.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
#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)
*/