開始使用免費開始

跳出 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 程式碼

檢視課程

練習說明

加入一個 break 條件,當解答已足夠好(依變數 is_good_enough 判斷)時觸發。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

#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)
*/
編輯並執行程式碼