霍纳在C ++中的统治

时间:2009-11-08 19:48:54

标签: c++ math

在尝试使用Horner's Rule计算多项式时,我有一个示例代码段,如下所示:

int Horner( int a[], int n, int x )
{
    int result = a[n];
    for(int i=n-1; i >= 0 ; --i)
        result = result * x + a[i];
    return result;
}

我理解a是系数数组,x是我要评估的值。我的问题是n是什么?

5 个答案:

答案 0 :(得分:9)

n是多项式的次数(和次数为n的多项式,除了0是特殊的,有n + 1个系数,因此数组的大小= n + 1,n =数组的大小 - 1)

答案 1 :(得分:4)

n是数组的大小

答案 2 :(得分:2)

'n'是数组中最后一个元素的索引。因此,n比数组的大小小。

答案 3 :(得分:2)

代码似乎不正确。声明:

int result = a[n];
如果n是数组的大小,

应该失败...如果n是数组的大小减去1,那么它将起作用但在这种情况下函数的契约是非常奇怪的。将空数组传递给函数是不可能的,这不是通用的,需要对调用方进行额外的检查。

答案 4 :(得分:0)

在C ++中,该语言不提供获取数组长度的本机支持。因此,代码必须经常保持一个保持长度的单独变量。在这个例子中,n参数告诉Horner函数数组中有多少元素。

在C ++中,传递元素的数量是惯用的。由于数组基于0,因此数组的最后一个元素是arr[n-1]