Keluar dari for loop dengan break
Terkadang Anda mungkin ingin keluar dari sebuah loop sebelum semua iterasi selesai. Misalnya, kode Anda bisa saja sudah mencapai tujuannya sebelum semua kemungkinan dicoba. Kata kunci break dapat digunakan untuk menghentikan loop lebih awal.
Pola kodenya seperti ini:
for(int i = 0; i < n; i++) {
// Do something
// Test for exiting early
if(breakout_condition) break;
// Otherwise carry on as usual
}
Di sini Anda akan menata ulang contoh sebelumnya sehingga loop berhenti ketika nilainya tidak banyak berubah (berdasarkan ambang batas). Fungsinya telah dimodifikasi sehingga mengembalikan sebuah List (Anda akan mempelajari List pada bab berikutnya), yang memungkinkan Anda melihat pendekatan pada setiap iterasi.
Fungsi sqrt_approx() yang telah dimodifikasi ini mengembalikan nilai akar kuadrat dan jumlah iterasi yang diperlukan untuk mencapai hasil tersebut berdasarkan ambang batas.
Latihan ini adalah bagian dari kursus
Mengoptimalkan Kode R dengan Rcpp
Petunjuk latihan
Tambahkan kondisi break yang dipicu jika solusinya sudah cukup baik (berdasarkan variabel is_good_enough).
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
#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)
*/