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