【发布时间】:2020-04-04 21:21:57
【问题描述】:
我已经使用数组实现了Horner's Method,如下所示。
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;
}
我对指针算法有点陌生,有几个问题:
- 我犯了什么罪吗?有更好的方法吗?
- 类似的实现使用
std::vector并避免传递数组大小n。这两种实现方式的优缺点是什么?
【问题讨论】:
-
可以在这里发布代码片段,例如可以在coliru.stacked-crooked.com 上运行?这也看起来像递归函数,肯定可以用单循环代替。
-
注意最后一次迭代
-
std::vector版本的优点是您不必担心罪恶。这真的不是关于“罪”,而是关于更容易使用、更不容易出错并且语法更易读的东西。 -
顺便说一句,在这里使用迭代器可能更方便,否则您仍然需要跟踪向量中的索引(或制作副本)