繁体   English   中英

C++ 霍纳法则——递归数组实现

[英]C++ Horner's Rule - Recursive Array Implementation

我已经使用 arrays 实现了霍纳方法,如下所示。

double hornerRule( const double x, const double a[], const int n ) {
    double ans = *a;
    if ( n > 0 ) { ans += x * hornerFunction( x, ++a, n - 1 ); }
    return ans;
}

我对指针算法有点陌生,有几个问题:

  1. 我犯了什么罪吗? 有更好的方法吗?
  2. 类似的实现使用std::vector并避免传递数组大小n 这两种实现的优缺点是什么?

使用新的 C++ 编译器,现代方法是使用 std::span 或 gsl::span 参数。 它包含指针和长度,可以很容易地从中构建子数组。

如果将 n 更改为模板参数,则取决于 n,它可以提高性能。 然后递归可以毫无问题地展开,编译器可以发挥它的优化魔法。

您也可以通过手动转换为循环来展开。

这一切都取决于你的目标。 如果 function 正常工作。 或者它对性能至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM