簡體   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