开始使用免费开始使用

跳出 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)
*/
编辑并运行代码